$funk = array(new ORMe(), 'Read'); // Создали массив
$funk(Review::TABLE, $id) // ВОТ ЭТО НЕПОНЯТНО $переменная(параметры метода Read)
В классе ORMe есть метод Read:
public function Read($table, $id = null, $page = null, $limit = null)
{
$newId = $id ? $id : null;
$test = array(new Crud(), 'Read');
return $test($table, $this->getColumns($table), $newId, $page, $limit);
}
Каким образом "непонятная" конструкция его вызвала?
Я имею в виду, что мы создали массив $func с двумя элементами в первом хранится объект ORMe, а во-втором просто строка с названием метода класса ORMe, как это работает?
Подскажите пожалуйста. В самом методе Read используется такой же трюк с классом Crud и его методом Read.
Это способ свернуть функцию вызова: массив с классом в нулевой позиции и названием метода в первой.
Т. е. $a = [new Crud(), 'Read']; $a(); то же, что и (new Crud())->Read().
Зачем - передать функцию куда-то, например, без лишних затрат.
На ваш вопрос отвечает документация:
http://php.net/manual/ru/functions.variable-functions.php
С версии PHP 5.4.0, можно вызывать callable-функцию, помещенную в переменную.
Пример #4 Сallable-фукнции
<?php
class Foo
{
static function bar()
{
echo "bar\n";
}
function baz()
{
echo "baz\n";
}
}
$func = array("Foo", "bar");
$func(); // выведет "bar"
$func = array(new Foo, "baz");
$func(); // выведет "baz"
$func = "Foo::bar";
$func(); // выведет "bar" в PHP 7.0.0 и выше; в предыдущих версиях это приведет к фатальной ошибке
?>
По факту, в такой конструкции вы первым элементом передаете класс, а последующими: методы либо переменные.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости