Одной из ситуаций, в которой мне приходилось их использовать, является обработка URI, хотя эта техника может быть устаревшей, и я, по общему признанию, давно ее не использовал.
Допустим, мы хотим извлечь URI из скрипта в формате domain.tld/controller/action/parameter/s
. Мы могли бы удалить имя скрипта, используя следующее:
$uri_string = str_replace($_SERVER['SCRIPT_NAME'], '', $_SERVER['REQUEST_URI']);
Чтобы извлечь из него значения контроллера, действия и параметра, нам нужно разобрать строку, используя разделитель пути '/'. Однако, если у нас есть начальные или конечные разделители, при взрыве у нас будут пустые значения массива, поэтому мы должны обрезать их с начала и конца строки:
$uri_string = trim($uri_string, '/');
Теперь мы можем разнести путь в массив:
$uri_data = explode('/', $uri_string);
$uri_data[0]
теперь содержит имя нашего контроллера, $uri_data[1]
содержит имя действия и значения в массиве, которые являются параметрами, которые должны быть переданы методу действия.
$controller_name = $uri_data[0];
$action_name = $uri_data[1];
Итак, теперь, когда у нас есть эти имена, мы можем использовать их для ряда вещей. Если вы храните свои контроллеры в очень специфичном каталоге относительно корня сайта, вы можете использовать эту информацию для require_once
класса контроллеров. В этот момент вы можете создать его экземпляр и вызвать его с помощью переменных переменных:
$controller = new $controller_name();
$controller->{$action_name}(); // Or pass parameters if they exist
В этом подходе есть много моментов безопасности, на которые стоит обратить внимание, но я видел один из способов использовать переменные.
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ : Я не предлагаю вам на самом деле использовать этот код.