laravel 基礎面試題-偏交談-2020-12-25-laravel-命令行工具artisan與tinker

2021-03-02 上海php自學中心
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 用過嗎?學習連結

xueyuanjun.com/post/9689

是什麼?

這是一種交互式 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)

相關焦點

  • 創建並運行一個新的 Laravel 項目
    經過 PHP 入門到實戰系列的基礎學習,接下來我們就可以正式開始 Laravel 框架的學習和使用了。而這一切都需要從創建一個新的 Laravel 項目開始。註:本系列教程基於 Laravel 5.7+1、創建一個新的 Laravel 項目正如官方文檔所言,有兩種方式可以創建一個新的 Laravel 項目,這兩種創建方式都是從命令行執行的:第一種是通過全局的 Laravel 安裝器,另一種是通過 Composer 的 create-project 命令。
  • Laravel-基礎「程式設計師培養之路第五十三天」
    laravel第一節 安裝官方手冊推薦我們使用Laravel Homstead虛擬機,我們可以著手去配置該虛擬機,若是初學者的話,建議先使用本地環境wamp即可。1.在git命令行輸入如下命令即可php artisan key:generate5. .env配置確保.env配置文件中的資料庫配置是正確的(如下)DB_CONNECTION=mysqlDB_HOST=本地主機DB_PORT=3306DB_DATABASE=myshopDB_USERNAME=rootDB_PASSWORD=1234
  • 特務Q:laravel與swoole優雅的結合
    laravel與swoole作為當下各自兩個方向的金字塔頂端的工程,有點誇大,仁者見仁。它們好比倚天劍屠龍刀,我們期望它們的結合,誕生一門強大的功法。讓我們可以更方便開發,下面來說說它們如何優雅的結合。你需要在你伺服器上面安裝php的swoole擴展。
  • 3分鐘短文:Laravel命令行的參數和可選項,分不清?怎麼可能!
    引言上一期我們介紹了laravel命令行的創建,以及使用方法。使用了一個沒有數據輸入和輸出的測試用例。 本期我們來介紹帶有命令行參數輸入,和命令行輸出信息的代碼用法。代碼時間聲明命令行位置參數,在類文件內$signature變量內書寫:protected $signature = 'password:reset {userId} {--sendEmail}';其中 userId是必填參數,需要填入一個數據;而 sendEmail 則是一個開關, 如果在命令行中帶有 --sendEmail 則返回true,否則返回默認值
  • 完結篇:91 個常見的 Laravel 面試題和答案(三)
    46) 列出 Laravel 中的基礎概念路由Eloquent ORM中間件安全緩存Blade 模板 47) 定義隱式控制器隱式控制器可幫助您定義適當的路由來處理控制器操作。需要使用 artisan 命令回滾上一次遷移。 68) 您所說的 Laravel Dusk 是什麼意思?Laravel Dusk 是用於測試啟用 JavaScript 的應用程式的工具。它提供了強大的瀏覽器自動化和測試 API。
  • PHP(Laravel)用戶註冊、登錄和退出
    那麼這些功能,在 laravel 中實現,需要多久呢?是一星期、一天、還是一小時呢?正確的答案是1秒鐘。打開命令行,輸入php artisan make:auth出現有一個提示,說我們布局模板已經有了,是否還要重新創建一個?
  • 安裝laravel,最靠譜的方法,利用composer安裝
    laravel框架是一款應用於web的php框架,這個框架因其非常優雅,簡潔方便使用而備受眾多開發者所使用,那麼今天我們就來介紹一下laravel這框框架在windows平臺怎樣進行安裝。安裝環境:php+mysql+apache平臺:windows一、安裝composer安裝環境安裝好了之後,我們先要將composer這個組件安裝起來,這個composer是php庫的管理工具,通過composer,我們可以方便快捷地下載php的庫,包括各種擴展庫等。
  • 3分鐘短文:Laravel ORM 模型用法綱要
    引言 前兩期為了說明laravel框架提供的資料庫操作能力,直接使用DB門面操作, 而沒有引入更為強大的eloquent orm功能。從本期開始,我們就分次把 eloquent的一些簡要知識點,為大家提煉演示一下。主要以代碼為主,配以簡要說明。
  • 創建Laravel自定義Helper輔助方法
    創建自定義輔助方法並非易事,在我的經驗中,將功能放在Helps.php中,然後將該文件放在app/Utils下,實用程序工具類,你可以根據自身情況在app中任何目錄都可以。接下來,需要將該文件登記到位於composer.json,這個在項目根目錄的文件中。
  • PHPer、Laravel 面試可能會遇到的問題及答案
    最近社區裡面有一篇文章引起了最多程序猿的關注,分享一下 Laravel、PHPer 面試可能會遇到的問題,看評論區不少小夥伴們被難倒,對於一些問題同樣難倒了我
  • 掌握 Laravel 的測試方法
    先執行下面的 artisan 命令創建一個 Post 模型及其對應的遷移文件。$ php artisan make:model Post --migration上面的命令將為我們創建一個 Post 模型類和資料庫遷移文件。
  • 3分鐘短文:太爽了,用Laravel寫API接口!
    本期為大家說一說用laravel寫restful風格的API,看看能有多簡單。以路由開端寫API接口,與傳統的渲染前端模板頁面有什麼區別?少了視圖,只需要準備好數據, 並按照規則格式化,返回就可以了。默認的驅動 token 定義在框架文件 laravel/framework/src/Illuminate/Auth/TokenGuard.php內。
  • Laravel 5.4 正式發布,PHP 開發框架 - OSCHINA - 中文開源技術...
    Laravel 5.4 將引入 Laravel Dusk 這一新工具,來解決這個問題。Dusk 能模擬瀏覽器的運行環境。它的目的是提供正確的方式進行頁面交互測試,所以可以使用 Dusk 去點擊按鈕或者連結、填寫表單、甚至拖放。Dusk 利用 ChromeDriver 和 Facebook PHP-webdriver 進行接口測試。
  • ApiBlueprint在laravel框架中的使用
    背景目前和前端聯調、其他部門聯調使用的方式有:使用MarkDown出接口文檔,放在共同的gitlab倉庫上面,前後端都可以訪問(只要約定好誰修改就好了,避免兩個人都修改出現差異),作為一個經常寫方法注釋的好程式設計師來說(其實你的leader也會要求你),要在每一個接口上面寫上幾行方法注釋,註明這個方法是做啥的,不然別人接手不便捷 _;使用apiDoc工具(使用方法可以查看
  • Laravel學習:服務容器綁定與解析
    這是服務容器最簡單的使用,下面是對服務容器的詳細介紹laravel容器基本認識  一開始,index.php 文件加載 Composer 生成定義的自動加載器,然後從 bootstrap/app.php 腳本中檢索 Laravel 應用程式的實例。
  • 隨手搞個自用的代碼生成包laravel-generator
    自動讀取同名數據表並填充到 model + resource + migration 的欄位Installationcomposer require hogen\laravel-generatorphp artisan vendor:publish --tag=generator
  • Laravel5.4 Vuejs編譯失敗的問題處理
    /resources/assets/js/app.js 17:26-61', showStack: false, showProperties: true, plugin: 'webpack-stream', __safety: { toString: [Function: bound ] } }從拋出的錯誤我們可以看到,是未引入 'laravel-elixir-vue
  • laravel高性能地從mysql資料庫中隨機獲取n條數據
    laravel如何高性能地從mysql資料庫中隨機獲取n條數據,有時候我們常常會需要從資料庫隨機獲取數據,比如:給工作人員隨機分配10個訂單,隨機從資料庫中隨機抽查100個用戶;這樣我們就需要隨機從資料庫獲取數據。
  • laravel框架實戰,資料庫的增刪改查,facade的使用
    laravel框架實戰,資料庫的增刪改查,facade的使用!在上一篇的文章中,我們學習了如何讓在laravel中創建視圖和模型的操作,今天我們將來學習如何在laravel中對資料庫進行增刪改查,通過facade來實現,具體操作如下:前提:首先我們需要在laravel中配置好資料庫,進入laravel的目錄,找到.env這個文件,在裡面對資料庫的主機名,資料庫名,用戶名,密碼進行配置,配置成功之後,我們才能夠對資料庫進行設置
  • laravel應用 之多個路由文件配置
    很多php開發者或者新近開發者,在一開始使用或學習laravel框架的時候,肯定會默認把所有的路由寫在 route/web.php中。然而這樣會有一個問題,就是那麼多的路由寫在這樣一個文件中,會顯得很多很冗雜,當然了小編一開始也是這樣寫的,不過經過多方查找和實驗,小編無意間看到 laravel 的路由還可以這樣配置。