如果 PHP 使用 --with-readline 選項編譯,則 CLI SAPI 使用 -a 選項時會提供交互式 shell。自 PHP 7.1.0 起,如果啟用了 readline 擴(kuò)展 ,交互式 shell 也可以在 Windows 上使用。
使用交互式 shell,你可以輸入 PHP 代碼并直接執(zhí)行。
示例 #1 使用交互式 shell 執(zhí)行代碼
$ 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 還有對函數(shù)、常量、類名、變量、靜態(tài)方法調(diào)用和類常量的 Tab 鍵補(bǔ)全功能。
示例 #2 Tab 鍵補(bǔ)全
當(dāng)可能有多個補(bǔ)全時,按兩次 Tab 鍵將會得到補(bǔ)全列表:
php > strp[TAB][TAB] strpbrk strpos strptime php > strp
當(dāng)僅可能有一個補(bǔ)全,按一次 Tab 鍵即可在同一行中補(bǔ)全剩余:
php > strpt[TAB]ime(
補(bǔ)全也適用于當(dāng)前交互式 shell 會話期間定義的名稱:
php > $fooThisIsAReallyLongVariableName = 42; php > $foo[TAB]ThisIsAReallyLongVariableName
交互式 shell 會存儲你的操作歷史記錄,可以通過上下鍵訪問。歷史記錄存儲于 ~/.php_history 文件。
CLI SAPI 提供了 cli.pager
和
cli.prompt
兩個 php.ini 配置。cli.pager
配置允許外部程序(例如 less)充當(dāng)分頁器輸出而不是直接在屏幕上顯示。
cli.prompt
配置可以更改 php >
提示符。
在交互式 shell 中還可以使用縮寫符號設(shè)置 php.ini 配置。
示例 #3 在交互式 shell 中設(shè)置 php.ini 配置
cli.prompt
配置:
php > #cli.prompt=hello world :> hello world :>
使用反引號可以在提示中執(zhí)行 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 >
設(shè)置分頁器為 less:
php > #cli.pager=less php > phpinfo(); (output displayed in less) php >
cli.prompt
配置支持一些轉(zhuǎn)義字符:
字符 | 描述 |
---|---|
\e |
用于添加提示符顏色。一個例子是 \e[032m\v \e[031m\b \e[34m\> \e[0m
|
\v |
PHP 版本。 |
\b |
指明 PHP 所在的塊。例如 /* 表示在多行注釋中。外部作用域用 php 來表示。
|
\> |
指明提示字符。默認(rèn)是 > ,但當(dāng) shell 位于未結(jié)束的塊或者字符串時會發(fā)生變化??赡艿淖址? ' " { ( >
|
注意:
在該模式下,通過 auto_prepend_file 和 auto_append_file 解析加載的文件會有一些限制 —— 例如函數(shù)必須在調(diào)用前定義。
如果 readline 擴(kuò)展不可用,在 PHP 8.1.0 之前,使用 -a 選項調(diào)用 CLI SAPI 會提供交互模式。
在此模式中,一個完整的 PHP 腳本應(yīng)該通過 STDIN 給出,并用 CRTL+d
(POSIX) 或者 CTRL+z
終止然后 ENTER
(Windows),腳本執(zhí)行。這與不加 -a 選項調(diào)用 CLI SAPI 基本相同。
自 PHP 8.1.0 起,如果 readline 擴(kuò)展不可用,使用 -a 調(diào)用 CLI SAPI 會失敗。