$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 и выше; в предыдущих версиях это приведет к фатальной ошибке
?>
По факту, в такой конструкции вы первым элементом передаете класс, а последующими: методы либо переменные.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Имеется массив полей формы, где каждое поле представлено в виде уникального подмассива:
Поставил CMake (без CLang), добавил в переменную path путь к cmake-39