#php #command-line-interface
#php #интерфейс командной строки
Вопрос:
При тестировании и разработке некоторых скриптов я хотел бы иметь возможность определять определенные переменные $ _GET.
Когда скрипт вызывается через mod_php / apache, эти переменные будут определены путем добавления ?foo=bar
к URL.
Возможно ли это вообще?
Комментарии:
1. Спросите себя, почему вы пытаетесь использовать $ _GET в программе CLI. Рассмотрите возможность пересмотра вашего дизайна.
2. Вы совершенно правы. Просто запуск cli делает отладку и быстрые тесты во время разработки намного проще, чем нажатие alt-tabbing в firefox для каждого изменения. В рабочей среде будет использоваться GET; в моей среде разработки я хотел бы просто определить некоторые вещи там.
Ответ №1:
Нет, это невозможно через CLI. Однако вы можете вручную присвоить значение $_GET
переменной.
ИЛИ вы можете использовать аргументы командной строки и присвоить их $_GET
.
$_GET['data'] = $argv;
^^ Это немного управляемо..
Ответ №2:
Вы можете просто сделать $_GET['foo'] = 'bar';
, чтобы установить ее.
Ответ №3:
Предполагая, что у вас есть некоторый код, который использует $ _GET [‘foo’] для выполнения чего-либо, тогда лучшим способом справиться с этим было бы извлечь этот код в класс / метод / функцию, а затем использовать контекстно-зависимые строительные леса, которые собирают соответствующие данные из среды и передают их в код -блок, чтобы делать это.
Итак, допустим, у вас был встроенный PHP-скрипт, подобный этому:
$foo = $_GET['foo'];
// do what I need to do with $foo
Затем вы могли бы обернуть это в функцию
function doBar( $foo ) {
// do what I need to do with $foo
}
Теперь ваш встроенный php-скрипт будет
$foo = $_GET['foo'];
doBar( $foo );
И вы могли бы очень легко написать CLI-скрипт для проверки этого, либо установив $foo напрямую
$foo = 'test value';
doBar( $foo );
Или путем синтаксического анализа входных данных CLI и получения foo оттуда.
По сути, ваш код, который выполняет что-то (модель в традиционном MVC), изолирован от своего окружения и может использоваться через HTTP-запрос, в скрипте CLI, в модульном тестировании и т. Д.
Одна вещь, от которой я бы воздержался, — это присвоение ваших собственных значений суперглобальным значениям $ _GET и $ _POST. Это вонючий и короткий путь к возникновению проблем в будущем.
Ответ №4:
Два варианта установки переменных $ _GET: просто есть что-то вроде:
<a href='www.example.com/index.php?foo=bar'>blah</a>
Это установит для $ _GET[‘foo’] значение bar.
Или:
<form method='get' action='index.php'>
Любая информация, которую вы отправите с помощью этой формы, будет извлекаться с помощью $ _GET .
Комментарии:
1. Ни то, ни другое вообще не применимо к CLI.