Хочу запилить частичное управление приложением из терминала. И что-то не могу нарыть инфы по выполнению функций. Например есть файл test с печатью строки PHP: print 'test string'; Из терминала строка печатается командой Код (Text): php test Если обернуть печать строки в функцию PHP: function println() { print 'test string'; } то команда выше не с работает, надо запустить функцию. И вот как эту функцию в терминале запустить что-то не могу нарыть.
хм... а как она должна сработать то, если её ни кто не вызывает? ) Вообще, для написания консольных тулз лучше всего воспользоваться пакетом вроде symfony/console. Там сразу будет и удобная работа с параметрами и хитрый вывод, вплоть до табличек и прогрессбаров.
Вот я и хочу знать как её вызвать. =) Можно так PHP: function println() { print 'test string'; } println(); Но это не вариант, функций будет несколько и надо вызывать конкретную по имени например. Спасибо, почитаю.
print использовать как обычный вывод инфы, а echo тогда зачем? 3 года назад мне так же сказали + echo (4 букав )
Обычный print больше ничего и не умеет. Это эдакий echo для тех, кто пришел в php со всяких С. Только он не умеет выводить пачку данных через запятую и накой-то хрен всегда возвращает единицу.
Да. =) Я Джаву изучаю, и там часто вывожу в консоль результат разными методами print.. И поскольку здесь вывод в консоль, то меня как-то передергивает использовать здесь echo, хотя разницы то никакой. =) Вывод в браузер только echo.
Нашел способ вызвать функцию. Код (Text): php -r "require 'test'; println();" Но это херня. Длинная неудобная команда. Есть решение проще PHP: if(function_exists( $argv[1] )) { call_user_func_array($argv[1], $argv); } function println() { print "test one"; } function println2() { print "test two"; } Вот так уже можно вызывать функцию передовая в качестве второго аргумента имя функции (первый аргумент это всегда имя файла). Код (Text): php test println php test println2
Никакого "вывода в консоль" в реале не существует. У тебя пхп-машина, будучи обычно программой, при своём старте от системы получает три обязательных файловых дескриптора - ввод, вывод и ошибки. В режиме обработки веб-запроса - веб-сервер запишет на вход нужные данные, все твои эхи, принты, принтфы и так далее - пойдут в выходной поток (с некоторыми оговорками на буферизацию), а мат на рукожопого программиста - в ошибки. Веб-сервер и/или сама пхп-машина еще дополнительно над выходными потоками - выход и ошибки - пошаманят и выплюнут результат в виде ответа на запрос. Когда ты запускаешь тот же сценарий, но в терминале/консоли, то пхп-машина работает точно так же. Если ты использовал пайпинг или редирект - на входе будут некие данные. Все эри, принты и так далее - пойдут в выход, весь мат на программиста - в ошибки. И ты дальше можешь умело пайпить и редиректить, открывать новые дескрипторы и так далее и тому подобное. Но самое важное тут это понимание того, что скрипт у тебя не поменялся. Поменялся только сапи и его окружение. Если ты пишешь функция имя(аргумент){печать строки;} то ты получишь одинаково пустой результат как при веб-запросе так и при запуске в консоли. Потому что ты декларировал функцию, но не вызывал её. Кстати, в консольниках очень удобно как раз таки пользоваться и выводом и ошибками. Можно через банальный fwrite(STDOUT или fwrite(STDERR задать в какой именно из этих двух потоков ты хочешь залупить данные.