Во время подготовки к тесту Zend я наткнулся на этот код, который работает, но я не могу понять, почему с учетом двух странных реквизитов в array_push. strtolower и ucfirst используются там, где должны быть переменные. Я пропустил некоторые документы?
<?php
$str = 'MY STRING';
$funcs = array();
array_push($funcs, 'strtolower', 'ucfirst');
foreach ($funcs as $func) {
$str = $func($str);
}
if ($str == 'My string') {
echo "Correct";
}
else {
echo "Incorrect";
}
?>
PHP поддерживает концепцию переменных функций. Это означает, что если
к имени переменной добавлены круглые скобки, PHP будет искать
функция с тем же именем, что и для переменной, и
попытается выполнить это. Среди прочего, это может быть использовано для
реализовать обратные вызовы, таблицы функций и так далее.
Источник: http://php.net/manual/en/functions.variable-functions.php
Самое интересное происходит здесь:
$str = $func($str);
Это переменная функция — функции, перечисленные в массиве (через array_push), вызываются на строковом вводе.