laravel 基础面试题-偏交谈-2020-12-25-laravel-命令行工具artisan与tinker
感谢关注本人公众号: 上海 PHP 自学中心
qq群(3年2万):517085546
laravel 基础面试题-偏交谈-2020-12-25-laravel-命令行工具artisan与tinker
首先了解一下,phg的运行原理,这里简单提一下。
PHP的四层体系
PHP从下到上是一个4层体系:
Zend引擎:
Zend整体用纯C实现,是PHP的内核部分,它将PHP代码翻译(词法、语法解析等一系列编译过程)为可执行opcode处理,并实现相应的处理方法,实现了基本的数据结构(如hashtable、oo)、内存分配及管理、提供了相应的api方法供外部调用,是一切的核心,所有的外围功能均围绕Zend实现。
Extensions:
围绕着Zend引擎,extensions通过组件式的方式提供各种基础服务,我们常见的各种内置函数(如array系列)、标准库等都是通过extension来实现,用户也可以根据需要实现自己的extension以达到功能扩展、性能优化等目的(如贴吧正在使用的PHP中间层、富文本解析就是extension的典型应用)。
Sapi:
Sapi全称是Server Application Programming Interface,也就是服务端应用编程接口,Sapi通过一系列钩子函数,使得PHP可以和外围交互数据,这是PHP非常优雅和成功的一个设计,通过sapi成功的将PHP本身和上层应用解耦隔离,PHP可以不再考虑如何针对不同应用进行兼容,而应用本身也可以针对自己的特点实现不同的处理方式。
Application:
这就是我们平时编写的PHP程序,通过不同的sapi方式得到各种各样的应用模式,如通过webserver实现web应用、在命令行下以脚本方式运行等等。
如果PHP是一辆车,那么车的框架就是PHP本身,Zend是车的引擎(发动机),Ext下面的各种组件就是车的轮子,Sapi可以看做是公路,车可以跑在不同类型的公路上,而一次PHP程序的执行就是汽车跑在公路上。因此,我们需要:性能优异的引擎+合适的车轮+正确的跑道。
先来讲讲 SAPI
SAPI通过通过一系列的接口,使得外部应用可以和PHP交换数据,并可以根据不同应用特点实现特定的处理方法,我们常见的一些sapi有:
apache2handler:这是以apache作为webserver,采用mod_PHP模式运行时候的处理方式。cgi:这是webserver和PHP直接的另一种交互方式,也就是大名鼎鼎的fastcgi协议,在最近今年fastcgi+PHP得到越来越多的应用,也是异步webserver所唯一支持的方式。cli:命令行调用的应用模式
下面来看看 php 的运行模式(这其实也是面试常问的)
1.cgi全称“通用网关接口”(Common Gateway Interface), 它可以让一个客户端,从浏览器向Web服务器上的程序请求数据,是客户端和程序之间传输数据的一种标准,另外CGI独立于任何语言,所以可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。如php,perl,tcl等。CGI针对每个用户请求都要开单独的子进程去维护,执行结束处理掉这个进程。典型的fork-and-execute方式
2.fastcgi,根据1中cgi的特性,可以知道消耗很大,如果很多用户请求,则会申请很多个子进程。。这时候出现了FastCGI。FastCGI 像是一个常驻 (long-live) 型的 CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去 fork 一次 (这是 CGI 最为人诟病的 fork-and-execute 模式)。这个是当下用的最多的了。。linux+nginx+php+mysql
- CLI模式 ,PHP-CLI是PHP Command Line Interface的简称,如同它名字的意思,就是PHP在命令行运行的接口,区别于在Web服务器上运行的PHP环境(PHP-CGI,ISAPI等)。 也就是说,PHP不单可以写前台网页,它还可以用来写后台的程序。 PHP的CLI Shell脚本适用于所有的PHP优势,使创建要么支持脚本或系统甚至与GUI应用程序的服务端,在Windows和Linux下都是支持PHP-CLI模式的
还有其余2种,自行百度。
##简单总结一下:
那么在这里,我们 的 命令行其实 就是cli的运行模式。而 传统的 lamp\lnmp,都是cgi模式。
我们执行golang
=>go run test.go
python
,=>python test.py
。也是通过命令行去执行代码
。
那么接下来,我们就讲讲laravel
中 封装的 php cli
运行工具,artisan
以及tinker
。
1. 请谈谈PHP artisan
是什么
Artisan 是 Laravel 自带的命令行接口,
有什么用
它提供了相当多的命令来帮助你构建 Laravel 应用。
怎么用
可以通过 list 命令查看所有可用的 Artisan 命令
php artisan list
每个命令都包含了「帮助」界面,它会显示和概述命令的可用参数及选项。只需要在命令前加上 help 即可查看命令帮助界面:
php artisan help migrate
详细可以查看laravel文档
2. 如何编写 Artisan 命令
创建命令类
首先,我们要了解专门有一个系统自带命令 make:command
来创建自定义命令文件:
php artisan make:command WelcomeMessage --command=welcome:message
执行完该命令后,会在 app/Console/Commands
目录下创建一个 WelcomeMessage.php
文件,如果不佳 command 参数,则会自动创建一个 命令名字(根据类名)
注册 命令类
在 app/Console/Kernel.php
,
新创建的命令类 WelcomeMessage
添加到 $commands
完成注册:
protected $commands = [
App\Console\Commands\WelcomeMessage::class
];
查看
php artisan list
就可以看到 welcome:message
命令了。
3. laravel 中的 tinker 用过吗?
学习链接
是什么?
这是一种交互式 Shell:获取用户输入并执行它们,然后将结果打印出来返回给用户。
如何用?
php artisan tinker
有什么用处?
可以在 Tinker Shell 中演练测试 Laravel 代码。如,模型服务调用,还可以手动触发队列任务、体验服务和事件
比如模型和服务,你可以使用控制台来创建一个新的模型,将其保存到数据库,然后查询这条记录(如果之前没有运行过 php artisan migrate 命令创建 users 表,先运行 migrate 命令创建):
还记得 factory 批量创建测试用户吗?
你也可以使用 tinker 来操作。
思考
php cli 何时使用?
php artisan 为我们提供了哪些便利?
你自定义过哪些 artisan 命令,是如何实现的?在哪一个业务中使用的?
说出你常用的,artisan 命令。
简介php 的运行原理
防爬虫说明
禁止 学习某地爬虫,知乎爬虫,CSDN 爬虫。
本文,首发在 learnku 社区。
@author
汪春波(www.shxdledu.cn)