PHP面试宝典之Laravel篇

PHP面试宝典之Laravel篇

artisan常用命令?

查看laravel版本:php artisan --version
重启队列:php artisan queue:restart
监听队列:php artisan queue:listen
删除失败队列:php artisan queue:forget
列出所有失败队列:php artisan queue:failed
创建新的job类:php artisan make:job
创建控制器:php artisan make:controller
设置最大运行时间:php -d memory_limit=-1
清除视图缓存: php artisan view:clear
清除缓存:php artisan cache:clear
清除路由缓存:php artisan route:cache
列出artisan命令列表:php artisan list
清理陪住文件缓存:php artisan config:cache

laravel的生命周期?

1:从入口文件index.php开始

2:引入composer,利用au to load自动加载第三方依赖

3:实例化app容器,绑定http、console内核

4:在http内核中,将中间件注册到路由器

5:路由器将请求转发到绑定的控制器,进行逻辑处理

6:处理完成,路由器再将结果分发到响应服务

7:通过send方法将响应结果输出

8:最后终止请求和响应,完成整个请求处理和响应

laravel框架的原理和设计模式?

1:首先laravel是基于mvc设计模式,将应用程序程序分为三个主要部分,控制器、模型、视图

2:其次laravel有很多核心组件,路由(路由处理请求,映射到控制器)、控制器(实现路由指向的方法)、中间件(在请求到达控制器之前和之后执行一些操作)、请求和响应(request、respone)、视图、数据库、

3:laravel中使用到的设计模式和技术:依赖注入(request请求)、事件系统(event和订阅者模式)、观察者模式、门面模式等

ServiceProvider服务提供者?

1:将服务注册到容器中,将创建权限交给容器

2:低耦合,当服务发生变动时,很少改动
例:视图服务提供者(将用户菜单栏目异步的形式显示到视图中去)

laravel门面技术?

laravel的所有门面都定义在facade命名空间下
门面为程序中绑定的类,提供了一个静态接口,我们可以不用实例化类,直接通过静态方法,使用这些类;如:cache缓存,db数据库,redis缓存,view视图,session等

注意:门面使用要谨慎,不易过多,容易导致类作用范围的膨胀,导致类越来越大

laravel依赖注入?

构造函数注入、属性注入、方法注入

当一个对象a,需要另一个对象b协助时,通常情况下,需要在a中创建b的实例,但依赖注入是使用容器c创建b的实例,然后通过传参的方式,注入到a中,再使用a直接调用b中的方法,也就是说在a中不需要创建b的实例;例:request请求就是依赖注入

laravel的中间件?

全局中间件、路由中间件、路由组中间件

进的顺序:全局中间件》路由组中间件》路由中间件

出的顺序:路由中间件》路由组中间件》全局中间件

1:定义中间件类(middleware目录下新增)

2:注册中间件(kernel.php文件中,找到对应的分组,引入中间件类)

3:分配中间件(控制器构造方法中调用,或着在路由最后调用)
例:auth中间件、cookie中间件、登录验证、空白字符过滤、伪造请求验证等

laravel的事件系统(event)是为了解决什么问题?

实现系统解耦,一个对象状态改变时,给其他依赖于它的对象通知,并自动更新;实现了系统解耦,保证高度的协作,利用的是观察者模式

事件监听器?

1:注册事件和监听者;EventServiceProvider中listen数组中注册事件和监听者

2:定义事件类;app/events目录下,构造方法,接收并创建对象

3:定义监听者类;app/listeners目录下,构造方法,接收事件实例,handle方法处理业务

4:分发事件;event:dispatch(参数)或者event(事件对象),当事件发生,监听者handle方法被触发

事件订阅者?

1: 创建订阅者类;在app/listeners目录下,其中subscribe方法分配事件(事件=>订阅者类中的方法名)

2:注册订阅者;EventServiceProvider中$subscribe属性中添加订阅者类

3:分发事件;当事件发生,订阅者根据subscribe中的对应关系,找到对应方法并执行

事件监听器和事件订阅者的区别?

事件监听器:一个监听器只能监听一个事件,每个事件可以有多个监听器;例:一件事的发生可能会导致后续三四个事件的触发

订阅者模式:一个类中监听多个事件;例:一个日志类,可以监听多个事件,例如登录,注册,退出等

laravel的路由是怎么设计的?有什么用?

路由系统是基于:http请求方法(如:get、post、put等)和url设计的

路由被定位为url和控制器方法之间的映射关系

路由组的作用?

用于组织路由,为它们应用共同的中间件和命名空间

什么是roc容器?

roc容器是用来解析一些不依赖于容器的类和接口,提高性能和降低内存占用。不是一个独立的容器,而是一种实现依赖注入的技术

在a类的构造方法中传入b类,在AppServiceProvider类的注册方法中定义一个解析器

roc容器和依赖注入的区别?

两者不同概念,依赖注入是设计模式,roc是laravel中的一种特殊容器

roc容器是一种轻量级的解析器技术,仅使用于一些简单的类和接口的解析;依赖注入可以实现更复杂的依赖注入情况

laravel的模型层是如何实现事务的?

通过db类的事务方法:transAction 方法实现;
在该方法中可以操作多个模型或数据表,全部成功,则提交事务,有一个失败,就回滚事务;
参考:事物的底层实现

yii框架的生命周期?

1:入口文件,web/index.php

2:入口脚本加载应用配置,并创建一个应用实例

3:应用实例通过请求组件,解析请求的路由

4:应用创建一个控制器去处理请求

5:控制器创建一个操作实例并针对操作执行过滤器

6:如果任何一个过滤器返回失败,则操作退出

7:如果所有过滤器都通过,操作将被执行

8:操作会加载一个数据模型,或许是来自数据库

9:操作会渲染一个视图,把数据模型提供给它

10:渲染结果返回给响应组件

11:响应组件发送渲染结果给用户浏览器

yii框架目录结构?

frontend :前台应用;

backend:后台应用;控制器、模型、视图目录

console:命令行

common:公共文件

vendor:第三方类库,composer自动加载

控制器:TestOneController.php

路由:test-one/add

方法名:actionAdd,必须加action

视图显示:$this->render(‘add’)

重定向方法:$this->redirect([‘test/show’]);

session对象:YII::app->session;

判断session是否开启:$session->isAction;

开启session:$session->open();

模型:静态方法tableName中return 表名即可

视图输出:<?php ?>,<?= ?>

yii2和yii的区别

1:yii2中使用了composer

2:事务,增加了begin和commit事务事件,在开始事务和提交事务时触发

3:yii2引入了资源包的概念,通过assets目录下的appasset类

4:数据库使用

查询一条:
1:是user::model()->find(条件)

2:是user::find()->where()->one()

查询多条:
1:是user::model()->findAll()

2:是user::find()->where()->all()

新增对象转数组方法:
asArray()方法直接将结果转为数组

yii2查询方法:

user::find()->one()
user::find()->all()
user::find()->count()
user::find()->each(10):每次取10条,迭代查询
user::find()->batch(10):每次取10条
where->addwhere()->orwhere

laravel、tp、yii框架的优缺点

laravel:
优点:文档丰富、三方类库、安全机制、中间件和路由过滤、错误机制、支持composer、支持各种设计模式

缺点:基于组件比较臃肿、性能稍低、较复杂不易上手

tp:
优点:轻量级中型框架、易上手、文档丰富、支持composer

缺点:对ajax不优化、目录结构混乱、上手易、深入难

yii:
优点:高性能、适用于大型项目、纯oop、模型使用方便、开发快、运行快、支持composer

缺点:对model层考虑少,文档少,视图中包含php代码

laravel和tp的区别?

1:框架架构:laravel采用mvc架构,tpc采用mvc+service+repository架构。laravel在代码组织和架构上更规范化,tp更自由

2:技术特点:laravel使用了一系列先进技术,如:事件,命令行工具,blade模版引擎,orm等,而tp更注重对传统php开发方式的支持,如原生sql和smarty模版引擎

3:文档和社区:laravel的文档和社区活跃度更高

4:学习曲线:laravel学习曲线相对陡峭,需要花费更多时间学习,tp更容易上手,适合初学者

5:使用场景:laravel适合大型、复杂的web应用,如企业级cms,电商网站等;tp适合中小型web应用,如个人博客,小型商城等

tp3.2和tp5的区别:

url和路由的改变:新增(路由分组、闭包定义、路由变量规则、组合变量)

模块和控制器的改变:应用命名空间统一为app而不是模块名,类名不带controller后缀,采用return返回,废除前置和后置方法,url访问自动定位控制器,增加了request和response

数据库改变:查询返回对象,支持链式查询(多个where),支持闭包查询,分块查询,视图查询,增加sql监听事件,废除单字母函数改用db,model

常量和助手函数的改变:废除了一些常量(is_get,is_post等)res

                       

点击阅读全文

上一篇 2023年 5月 28日 am10:46
下一篇 2023年 5月 28日 am10:48