互動式 shell
如果 PHP 使用 --with-readline 選項編譯,則 CLI SAPI 使用 -a 選項時會提供互動式 shell。自 PHP 7.1.0 起,如果啟用了 readline 擴充套件 ,互動式 shell 也可以在 Windows 上使用。
使用互動式 shell,你可以輸入 PHP 程式碼並直接執行。
示例 #1 使用互動式 shell 執行程式碼
$ php -a Interactive shell php > echo 5+8; 13 php > function addTwo($n) php > { php { return $n + 2; php { } php > var_dump(addtwo(2)); int(4) php >
互動式 shell 還有對函式、常量、類名、變數、靜態方法呼叫和類常量的 Tab 鍵補全功能。
示例 #2 Tab 鍵補全
當可能有多個補全時,按兩次 Tab 鍵將會得到補全列表:
php > strp[TAB][TAB] strpbrk strpos strptime php > strp
當僅可能有一個補全,按一次 Tab 鍵即可在同一行中補全剩餘:
php > strpt[TAB]ime(
補全也適用於目前互動式 shell 會話期間定義的名稱:
php > $fooThisIsAReallyLongVariableName = 42; php > $foo[TAB]ThisIsAReallyLongVariableName
互動式 shell 會儲存你的操作歷史記錄,可以通過上下鍵訪問。歷史記錄儲存于 ~/.php_history 檔案。
CLI SAPI 提供了 cli.pager
和
cli.prompt
兩個 php.ini 配置。cli.pager
配置允許外部程式(例如 less)充當分頁器輸出而不是直接在螢幕上顯示。
cli.prompt
配置可以更改 php >
提示符。
在互動式 shell 中還可以使用縮寫符號設定 php.ini 配置。
示例 #3 在互動式 shell 中設定 php.ini 配置
cli.prompt
配置:
php > #cli.prompt=hello world :> hello world :>
使用反引號可以在提示中執行 PHP 程式碼:
php > #cli.prompt=`echo date('H:i:s');` php > 15:49:35 php > echo 'hi'; hi 15:49:43 php > sleep(2); 15:49:45 php >
設定分頁器為 less:
php > #cli.pager=less php > phpinfo(); (output displayed in less) php >
cli.prompt
配置支援一些轉義字元:
字元 | 描述 |
---|---|
\e |
用於新增提示符顏色。一個例子是 \e[032m\v \e[031m\b \e[34m\> \e[0m
|
\v |
PHP 版本。 |
\b |
指明 PHP 所在的塊。例如 /* 表示在多行註釋中。外部作用域用 php 來表示。
|
\> |
指明提示字元。預設是 > ,但當 shell 位於未結束的塊或者字串時會發生變化。可能的字元有
' " { ( >
|
注意:
在該模式下,通過 auto_prepend_file 和 auto_append_file 解析載入的檔案會有一些限制 —— 例如函式必須在呼叫前定義。
互動模式
如果 readline 擴充套件不可用,在 PHP 8.1.0 之前,使用 -a 選項呼叫 CLI SAPI 會提供互動模式。
在此模式中,一個完整的 PHP 指令碼應該通過 STDIN 給出,並用 CRTL+d
(POSIX) 或者 CTRL+z
終止然後 ENTER
(Windows),指令碼執行。這與不加 -a 選項呼叫 CLI SAPI 基本相同。
自 PHP 8.1.0 起,如果 readline 擴充套件不可用,使用 -a 呼叫 CLI SAPI 會失敗。