php readline 模塊是一個專門針對在控制臺(也就是命令行)環境下需要和用戶交互的 PHP 程序開發的工具模塊。直觀地說,如果你在命令行環境下使用 PHP 腳本,你就可以使用 readline 模塊提供的方法來獲取控制臺中用戶的輸入并進行處理。
不需要過多拿出某些高深的例子來解釋 readline 的用處,可以想象一下常用的命令行程序。比如在 Git,composer,brew 或者 PHP 包管理器等工具使用過程中輸入指令時,參數補全和用戶推薦顯然非常方便且能顯著提高開發效率。這類過程離不開 readline 強大的特性,比如 readline_read_history()、readline_add_history() 等等方法。
// 添加歷史記錄 readline_add_history($input); // 讀取歷史記錄 readline_read_history($file); // 輸出提示符 readline_callback_handler_install($prompt, $callback);
當然,我們也可以實現更加靈活的 readline 使用方式:readline_callback_handler_install()。這個方法會在用戶輸入的時候調用一個函數,你可以給這個函數傳入一個具有非常靈活控制權的回調函數。例如:
function callback_function($input) { echo $input, "\n"; } readline_callback_handler_install('', 'callback_function'); while (true) { usleep(1000); readline_callback_read_char(); } readline_callback_handler_remove();
readline 可以實現功能的方法特別多,這里不一一贅述。我們掌握了這些基本的方法之后,就可以愉快地在命令行中權威說出我們想要實現的一切命令和工具了。例如:
<?php $name = readline("What is your name? "); echo "Hello, $name\n"; ?>
以及像下面這個例子當中用 readline 讀取輸入并完成一個簡單鬧鐘的實現:
<?php echo "Welcome to your alarm clock!\n"; do { echo "Enter the time for the alarm to ring (format HH:MM): "; $input = readline(); // 定義 24 小時時鐘格式 $format = 'H:i'; try { // 將輸入的數據轉換為時間戳 $timestamp = DateTime::createFromFormat($format, $input)->getTimestamp(); } catch (Exception $e) { echo "Invalid time format, try again.\n"; continue; } // 獲取當前時間戳 $now = time(); // 如果設置時間已經過期,則打印提醒,并要求重新輸入時間 if ($timestamp <= $now) { echo "The time you entered is already past, try again.\n"; continue; } // 取消生成的鬧鐘程序,然后重新加入一個 pcntl_alarm($timestamp - $now); pcntl_signal(SIGALRM, function () { readline_add_history(""); readline_callback_handler_remove(); echo "\a[ALARM] It's time!\n"; exit(); }); echo "Alarm set for " . date($format, $timestamp) . ", press ctrl+c to quit.\n"; } while (true); ?>
看到上面的例子,我們可以開心地玩起所有類似功能的自己的命令行管理工具了。
本文只是簡要介紹了 readline 模塊,如果您想要了解更多 readline 靈活的功能,還邀請您閱讀相關文檔。 祝愉快開發!