laravel篇

1. 简述laravel的生命周期

2623c78f9e824fb89db4552be669404c

  1. 导入composer自动加载功能,加载框架类库
  2. 引入laravel应用程序实例App
  • 启动容器
  • 注册http处理器
  • 注册console处理器
  • 注册异常处理器
  1. 启动http处理器,接收request请求
  2. 以管道的设计模式,执行部分(全局)中间件
  3. 路由解析调度
  4. 实例化当前控制器
  5. 执行web中间件
  6. 执行控制器中间件
  7. 执行控制器操作
  8. 返回response
  9. 结束框架

Laravel采用了单一的入口模式,应用的所有请求入口都是public/index.php文件。

  1. 注册类文件自动加载器:laravel通过composer进行依赖管理,无需开发者手动导入各种类文件,而由自动加载器自行导入。
  2. 创建服务容器:从bootstrap/app.php文件中取得laravel应用实例$app(服务容器)
  3. 创建HTTP/Console内核:传入的请求会被发送给HTTP内核或者console内核进行处理
  4. 载入服务提供者至容器:在内核引导启动的过程中最重要的动作之一就是载入服务提供者到你的应用,服务提供者负责引导启动框架的全部各种组件,例如数据库、队列、验证器以及路由组件
  5. 分发请求:一旦应用完成引导和所有服务提供者都注册完成,Request 将会移交给路由进行分发。路由将分发请求给一个路由或控制器,同时运行路由指定的中间件

2. 服务提供者是什么?

服务提供者是所有laravel应用程序引导启动的中心,laravel的核心服务器、注册服务容器绑定、事件监听、中间件、路由注册以及我们的应用程序都是由服务提供者引导启动的。

3. IoC容器是什么?

IoC(Inversion of Control)译为 「控制反转」,也被叫做「依赖注入」(DI)。什么是「控制反转」?对象 A 功能依赖于对象 B,但是控制权由对象 A 来控制,控制权被颠倒,所以叫做「控制反转」,而「依赖注入」是实现 IoC 的方法,就是由 IoC 容器在运行期间,动态地将某种依赖关系注入到对象之中。

其作用简单来讲就是利用依赖关系注入的方式,把复杂的应用程序分解为互相合作的对象,从而降低解决问题的复杂度,实现应用程序代码的低耦合、高扩展。

Laravel 中的服务容器是用于管理类的依赖和执行依赖注入的工具。

4. Facades 是什么?

Facades(一种设计模式,通常翻译为外观模式)提供了一个”static”(静态)接口去访问注册到 IoC 容器中的类。提供了简单、易记的语法,而无需记住必须手动注入或配置的长长的类名。此外,由于对 PHP 动态方法的独特用法,也使测试起来非常容易。

5. Contract 是什么?

Contract(契约)是 laravel 定义框架提供的核心服务的接口。Contract 和 Facades 并没有本质意义上的区别,其作用就是使接口低耦合、更简单。

6. 谈谈 Laravel 和 YII 框架的区别
  1. 在 YII 框架中的路由是通过书写 Controller、Action 间接定义路由,而 Laravel 中是在 route 路由文件中直接定义路由入口
  2. Laravel 提供 ORM 对象关系映射,使读写数据库的操作更加简单
  3. Laravel 提供更多的 Artisan 命令和脚手架开发
  4. Laravel 的 Composer 扩展包比 Yii 框架更多,开发更加高效
7. 谈谈 Laravel 和 TP5 框架的区别
  1. 提交数据的方式:laravel在提交表单的时候需要在表单中加入{csrc_field}来防止跨域攻击;TP不会。
  2. 路由:laravel必须先定义,再使用;TP在配置文件中开启路由。
  3. 中间件:laravel中间件,就是http请求到达之前经过的层,通过中间件我们可以验证用户是否登录等一些通用操作。
  4. 操作数据库的方式:都可以使用实例化(建立相对应的模型类)和DB::table来操作数据库。使用原生查询时不太一样,laravel使用Db::操作(‘原生sql’),TP使用Db::query(‘原生sql’)。
  5. Laravel升级十分简易,而TP大版本的升级要重构代码。
  6. 条件判断语句书写方式的差异: laravel框架里 if else判断语句和foreach语句 书写时必须以@if开头 以@endif结尾,如果没有则报语法错误,@foreach @endforeach同理;而TP框架则和PHP语法规则使用方式一致直接ifesle语句判断和foreach循环遍历。