laravel 基础面试题-偏交谈-2020-12-25-laravel-命令行工具artisan与tinker

未匹配的标注

感谢关注本人公众号: 上海 PHP 自学中心
qq群(3年2万):517085546

laravel 基础面试题-偏交谈-2020-12-25-laravel-命令行工具artisan与tinker

首先了解一下,phg的运行原理,这里简单提一下。

PHP的四层体系

PHP从下到上是一个4层体系:

  1. Zend引擎:

    Zend整体用纯C实现,是PHP的内核部分,它将PHP代码翻译(词法、语法解析等一系列编译过程)为可执行opcode处理,并实现相应的处理方法,实现了基本的数据结构(如hashtable、oo)、内存分配及管理、提供了相应的api方法供外部调用,是一切的核心,所有的外围功能均围绕Zend实现。

  2. Extensions:

    围绕着Zend引擎,extensions通过组件式的方式提供各种基础服务,我们常见的各种内置函数(如array系列)、标准库等都是通过extension来实现,用户也可以根据需要实现自己的extension以达到功能扩展、性能优化等目的(如贴吧正在使用的PHP中间层、富文本解析就是extension的典型应用)。

  3. Sapi:

    Sapi全称是Server Application Programming Interface,也就是服务端应用编程接口,Sapi通过一系列钩子函数,使得PHP可以和外围交互数据,这是PHP非常优雅和成功的一个设计,通过sapi成功的将PHP本身和上层应用解耦隔离,PHP可以不再考虑如何针对不同应用进行兼容,而应用本身也可以针对自己的特点实现不同的处理方式。

  4. 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

  1. 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 用过吗?

学习链接

xueyuanjun.com/post/9689

是什么?

这是一种交互式 Shell:获取用户输入并执行它们,然后将结果打印出来返回给用户。

如何用?

php artisan tinker

有什么用处?

可以在 Tinker Shell 中演练测试 Laravel 代码。如,模型服务调用,还可以手动触发队列任务、体验服务和事件

比如模型和服务,你可以使用控制台来创建一个新的模型,将其保存到数据库,然后查询这条记录(如果之前没有运行过 php artisan migrate 命令创建 users 表,先运行 migrate 命令创建):

命令行你应该记住的点

还记得 factory 批量创建测试用户吗?
你也可以使用 tinker 来操作。

命令行你应该记住的点

思考

  1. php cli 何时使用?

  2. php artisan 为我们提供了哪些便利?

  3. 你自定义过哪些 artisan 命令,是如何实现的?在哪一个业务中使用的?

  4. 说出你常用的,artisan 命令。

  5. 简介php 的运行原理


防爬虫说明

禁止 学习某地爬虫,知乎爬虫,CSDN 爬虫。
本文,首发在 learnku 社区。

@author
汪春波(www.shxdledu.cn)

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
发起讨论 只看当前版本


暂无话题~