php开发面试题---lavarel和tp的区别是什么(呕心整理)

时间:2024-04-03 11:37:02

php开发面试题---lavarel和tp的区别是什么(呕心整理)

一、总结

一句话总结:

反思的回顾非常有用,因为决定了我的方向和技巧
以战养己,这是非常非常好的方式
主要从大小、功能、安全性、操作等方面分析

1、lavarel的优点有哪些?

1、火:全球第一php框架,功能强大,社区活跃
2、巨匠型开发框架:Lavavel一直秉承着优雅的原则,很好的支持了composer,实现了更丰富的扩展,社区文档活跃,相较于TP,Lavavel更庞大,安全性也更高,更适合开发大中型项目,被称为“巨匠型开发框架”。

2、tp的优点有哪些?

1、国人开发,中文文档,入门简便,适合中小型项目
2、ThinkPhp简单、快速,基于MVC和面向对象,易用性较高,是一款简洁实用的轻量级框架。

3、lavarel和tp的区别是什么?

大小:tp轻量级,lavarel巨匠型
功能:lavarel更强大,也更大,比如tp里面就没有广播
安全性:防csrf攻击
操作:1、路由;2、中间件 与 前置操作和钩子

Laravel 在请求需要先定义路由,Tp5可以不定义,有pathinfo路由即可访问。
Laravel 在请求之前会有中间件, Tp5会有前置操作和钩子。

二、Laravel 和 Tp5的一些区别

1.0 Laravel 在表单提交的时候会有csrf 跨站请求伪造验证,Tp5则没有。
2.0 Laravel 在请求需要先定义路由,Tp5可以不定义,有pathinfo路由即可访问。
3.0 Laravel 在请求之前会有中间件, Tp5会有前置操作和钩子。

参考:Laravel 和 Tp5的一些区别 - 简书
https://www.jianshu.com/p/03e4ac7e3fa3

四、参考:laravel与TP的区别

1、TP框架:

ThinkPhp简单、快速,基于MVC和面向对象,易用性较高,是一款简洁实用的轻量级框架。

2、Laravel框架:

Lavavel一直秉承着优雅的原则,很好的支持了composer,实现了更丰富的扩展,社区文档活跃,相较于TP,Lavavel更庞大,安全性也更高,更适合开发大中型项目,被称为“巨匠型开发框架”。

个人感觉TP5和Laravel框架的区别已经很小了,相较于TP3,TP5支持了composer安装,配置文件位置变化,支持了闭包函数,验证方式也跟Lavarel相似,数据返回方面也可以使用return进行数据返回。

3、区别

1)提交数据的方式,Laravel在提交表单时需要在表单中加入{csrf_field}来防止跨域攻击,而TP不会。

2)路由,Laravel必须先定义,再使用,路由文件为routes.php,TP在配置文件中开启路由后,路由格式是:'路由表达式' => '路由地址和参数'(使用路由的前提是URL支持phthinfo并且开启路由),路由可以使URL更符合SEO。

3)中间件,Laravel的中间件,中间件就是HTTP请求到达之前经过的层,通过中间件我们可以验证用户是否登录等一些通用操作。

4)操作数据库方式,都可以使用实例化(建立相对应的模型类)和DB:table('表名')来操作数据库,使用原生查询时不太相同,Laravel使用Db::操作('原生sql'),TP使用Db::query('原生sql');

5)Laravel升级十分简易,而TP大版本的升级要重构代码。

Laravel最大的强项是充分运用了PHP面向对象的特行和软件工程的思想,是一个几近解耦的框架(它引入了各种各样的设计模式,如IOC模式、以来注入等)。

参考:laravel与TP的区别 - Rerise的博客 - CSDN博客
https://blog.csdn.net/jiangnanqbey/article/details/80860156

五、 TP与laravel简介

1、Tp

ThinkPHP是一个快速、简单的基于MVC和面向对象的轻量级PHP开发框架,遵循Apache2开源协议发布,从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,尤其注重开发体验和易用性,并且拥有众多的原创功能和特性,为WEB应用开发提供了强有力的支持。 3.2版本的服务器环境要求如下: PHP5.3以上版本

2、Laravel

Laravel是一个简单优雅的PHP Web开发框架,可以将开发者从意大利面条式的代码中解放出来,通过简单、高雅、表达式语法开发出很棒的Web应用,Laravel拥有更富有表现力的语法、高质量的文档、丰富的扩展包,被称为“巨匠级PHP开发框架”。 laravel框架的安装满足条件:

PHP版本 >= 5.5.9

PHP扩展:OpenSSL

PHP扩展:PDO

PHP扩展:Mbstring

PHP扩展:Tokenizer

Laravel需要依赖 Composer管理,必须首先安装Composer。

二、tp与laravel的目录结构

1、TP目录结构:

├─index.php 入口文件

├─README.md README文件

├─Application 应用目录

├─Public 资源文件目录

└─ThinkPHP 框架目录

核心代码目录:

├─ThinkPHP 框架系统目录(可以部署在非web目录下面)

│├─Common 核心公共函数目录

│├─Conf 核心配置目录

│├─Lang 核心语言包目录

│├─Library 框架类库目录

││ ├─Think 核心Think类库包目录

││ ├─Behavior 行为类库目录

││ ├─Org Org类库包目录

││ ├─Vendor 第三方类库目录

││ ├─ ... 更多类库目录

│├─Mode 框架应用模式目录

│├─Tpl 系统模板目录

│├─LICENSE.txt 框架授权协议文件

│├─logo.png 框架LOGO文件

│├─README.txt 框架README文件

│└─index.php 框架入口文件

① C层放在application/home/controller中,M层在application/home/model,视图放在application/home/view中。

② Tp里面使用的模板引擎是smarty,所以传值以及调用模板为assign和display。

③ 实现了模板输出的替换和过滤,如__APP__,__MODULE__,__URL__,__PUBLIC__等

④ 自带一些缓存的方法,如S (数据缓存) F(快速缓存) cache(查询缓存)以及静态缓存

⑤ 对网站安全性有多重防护,输入过滤(I方法)、上传安全、防止XSS攻击、防止sql注入、表单合法性检测(create方法创建数据对象的时候,可以使用数据的合法性检测,可以使用insertFields 和 updateFiel

ds属性或者field方法)等

⑥ ThinkPHP提供了灵活的全局配置功能,采用最有效率的PHP返回数组方式定义,支持惯例配置、公共配置、模块配置、调试配置和动态配置,分别讲述了在Apache、IIS、和nginx上的伪静态配置。‘⑦ thinkphp 也采用了命名空间的方法用来区分每个文件

⑧ 在ThinkPHP中基础的模型类就是Think\Model类,该类完成了基本的CURD、ActiveRecord模式、连贯操作和统计查询,一些高级特性被封装到另外的模型扩展中。

⑨ 基础模型类的设计非常灵活,甚至可以无需进行任何模型定义,就可以进行相关数据表的ORM和CURD操作,只有在需要封装单独的业务逻辑的时候,模型类才是必须被定义的。

⑩ ThinkPHP有专门为开发过程而设置的调试模式,开启调试模式后,会牺牲一定的执行效率,但带来的方便和除错功能非常值得。

11  tp中session使用的非常灵活在任何页面都能够随意调取,不需要重复的引入,只需要开启一次session可以了。 tp中不需要反复的写路由tp框架的s ession机制在配置中文件中配置好就可以用

12 使用系统内置的I函数是避免输入数据出现安全隐患的重要手段,I函数默认的过滤方法是htmlspecialchars,如果我们需要采用其他的方法进行安全过滤,有两种方式:

+-------------------------------------------------------------------------+

| 'DEFAULT_FILTER'        => 'strip_tags'

| 'DEFAULT_FILTER'        => 'strip_tags,stripslashes',

+--------------------------------------------------------------------------+

13如果你没有使用I函数进行数据过滤的话,还可以在模型的写入操作之前调用filter方法对数据进行安全过滤,

如 $this->data($data)->filter('strip_tags')->add();

  2、Laravel目录:

app目录包含了应用的核心代码;

bootstrap目录包含了少许文件用于框架的启动和自动载入配置,还有一个cache文件夹用于包含框架生成的启动文件以提高性能; config目录包含了应用所有的配置文件;

database目录包含了数据迁移及填充文件,如果你喜欢的话还可以将其作为 SQLite 数据库存放目录;

public目录包含了前端控制器和资源文件(图片、JavaScript、CSS等);

resources目录包含了视图文件及原生资源文件(LESS、SASS、CoffeeScript),以及本地化文件;

storage目录包含了编译过的Blade模板、基于文件的session、文件缓存,以及其它由框架生成的文件,该文件夹被细分为成app、framework和logs子目录,app目录用于存放应用要使用的文件,framework目录用于存放框架生成的文件和缓存,最后,logs目录包含应用的日志文件;

tests目录包含自动化测试,其中已经提供了一个开箱即用的PHPUnit示例;

vendor目录是laravel的核心代码库,包含Composer依赖;

M层放在在app下面,不用再给专门的文件夹,app/Http下面有个routes.php,专门存放路由,每个控制器里的方法必须都要有,app/Http/Controller下面放的是控制器,resources/views下面放的是模版,以.blade.php为结尾。配置数据库信息可以直接在。Env文件中修改就可以了。

①laravel框架对环境有要求,5.2版本的laravel要求php5.5.9以上,还要开一些扩展。

②在浏览器中请求的路由通过app/Http/routes.php进行解析,在进入相应的控制器方法,有get、post、any、match等一些方法③传值、调用模板return view('user.profile', ['user' => $user]);

④设置session值:默认session只能在本方法中获取,可以在app/Http/kernel.php设置。

+-------------------------------------------------------------------------+

| session(['chairs' => 7, 'instruments'=> 3]);

| session()->get('key');session()->put('key', $value);session(‘key’)

+--------------------------------------------------------------------------+

也可以用$request->session()->get()/put()设置

Laravel的session的配置文件配置在app/config/session.php中session的永久保存(在不过期范围内)Session::put('key', 'value');

Session驱动(file,cookie,database,memcached,array)

配置文件为config/session.php

默认使用文件驱动

File session数据存储在storage/framework/session目录下

Cookie session数据储存在经过加密的cookie中

Database session数据储存在数据库中
Memcached/redis session数据存储在memcached/redis中
Array session数据存储在简单地数组中,非持久化(常用于运行测试)

⑤在AppServiceProvider中使用share方法可以是所有模板共享数据
⑥{{ $a}}是内置的输出数据的方法,默认被转义,可以使用{!!$a!!}输出原本代码而不会被转义
⑦@foreach @endforeach @if @elseif @else @endif
⑧模板继承可以在视图中使用同一个主模板,节省代码,方便管理
⑨数据库操作可以使用原生sql语句也可以使用查询构建器

三、Laravel与Tp的路由
1、laravel路由
laravel必须先定义路由,所有应用路由都定义在app/Http/routes.php文件中。
默认情况下,routes.php 文件包含单个路由和一个路由群组,该路由群组包含的所有路由都使用了中间件组 web,而这个中间件组为路由提供了 Session 状态和 CSRF 保护功能。
而thinkphp中开启路由:“URL_ROUTER_ON”=true;
路由规则的定义格式为: '路由表达式'=>'路由地址和参数'。 2、TP路由
要使用路由功能,前提是你的URL支持PATH_INFO并开启路由路由规则的定义格式为: '路由表达式'=>'路由地址和参数'

四、Laravel与Tp基本配置与视图以及Laravel的中间件

1、laravel视图

视图文件存放在 resources/views 目录

判断视图是否存在用 view()->exists() 在所有视图之间共享数据片段,这时候可以使用视图工厂的share方法,通常,需要在服务提供者的boot 方法中调用 share 方法,你可以将其添加到 AppServiceProvider 或生成独立的服务提供者来存放它们:

2、数据显示

Blade 的 {{}} 语句已经经过 PHP 的htmlentities 函数处理以避免 XSS 攻击。 Blade 的 @include 指令允许简单的在一个视图中包含另一个 Blade视图,可以传递参数到被包含的视图@include('view.name', ['some' => 'data'])

3、Tp视图

赋值assign调用页面display

在当前模版文件中包含其他的模版文件使用include标签,Include标签支持在包含文件的同时传入参数

4、laravel基本配置

Laravel框架的所有配置文件都存放在 config 目录下。

.env中的所有配置及其值被载入到 PHP 超全局变量 $_ENV 中

5、Tp配置::
公共配置文件(默认位于Application/Common/Conf/config.php)。获取已经设置的据库连接 参数值:C('参数名称')

6、laravel的中间件

Laravel框架自带了一些中间件,包括维护模式、认证、CSRF保护中间件等。所有的中间件都位于app/Http/Middleware 目录下。

可以将中间件看做 HTTP 请求到达目标动作之前必须经过的“层”,每一层都会检查请求并且可以完全拒绝它。分配中间件到路由

首先应该在 app/Http/Kernel.php 文件中分配给该中间件一个简写的 key,默认情况下,该类的 $routeMiddleware 属性包含了 Laravel 内置的入口中间件,添加你自己的中间件只需要将其追加到后面并为其分配一个 key:

中间件在 HTTP Kernel 中被定义后,可以在路由选项数组中使用 $middleware 键来指定该中间件: Route::get('admin/profile', ['middleware' => 'auth', function (){ // }]);

五、Laravel与Tp数据库

1、laravel数据库

Laravel 支持四种类型的数据库系统:MySQLPostgres SQLite SQL Server 可以配置读写分离

运行原生 SQL 查询

DB方法:select, update,insert, delete, 和statement。数据库事务所有的填充类都位于database/seeds目录

在run方法中,可以插入任何你想插入数据库的数据

可以使用 Artisan 命令db:seed来填充数据库

2、Tp数据库

目前的数据库包括Mysql、SqlServer、PgSQL、Sqlite、Oracle、Ibase、Mongo,也包括对PDO的支持。

六、 Laravel与Tp的防范机制

参考:TP与laravel简介 - 少昊 鹰 的 IT博客 - CSDN博客
https://blog.csdn.net/qq_33620483/article/details/78062502