Поскольку PHP имеет встроенную unix only функцию readline()
, чтобы сделать именно это, здесь оставляем следующие примечания.
Мы можем использовать и хранить результат readline
в переменной.
#!/usr/bin/php
<?php
$user = readline("List dir [l] | Say hello [h] | exit [q]: ");
if ($user === "l"){ system("ls"); }
if ($user === "h"){ echo "Hello!"; }
if ($user === "q"){ exit; }
echo "\nThanks!";
Пример вывода:
l
ls результат
h
«привет»
q
выход
ctrl+c
выход.
ctrl+d
с пустым входом, перейти к следующей последовательности. "Спасибо". $user
определено и пусто, без ошибок.
ctrl+d
с некоторым вводом: никаких действий. Все еще жду ввода.
ctrl+m
Продолжить и принять текущий ввод в $user
.
ctrl+j
Продолжить и принять текущий ввод в $user
, то же поведение, что и ctrl+m
.
Return
перейти к следующей последовательности «Спасибо». $user
может оставаться пустым, без ошибок.
ctrl+z
может использоваться для отмены цикла и перехода к верхнему. $user
будет сброшено, если переменная не определена в этой области.
В зависимости от ввода мы можем определить пустые значения, используя !empty
или сделать больше хирургических тестов (ответ readline может быть многозначным).
$user
можно проверить с помощью !isset
, если еще нет , спросить .
Также имеется встроенный readline_add_history()
для хранения пользовательского ввода в объекте, где значения могут быть получены непосредственно по их имени (приятно для ясности кода):
readline_add_history($user);
print_r(readline_list_history());
print_r(readline_user());
Очень полезно для создания действительно сложных вещей!
http://php.net/manual/en/function.readline.php