PHP 5.4
Поставил себе на ноут ПХП 5.4, смотрю как работает. Трейты, конечно, приятная штука, но гораздо важнее, что синтаксис в порядок стали приводить. К сожалению, с первой попытке порядок навести не удалось, но стало гораздо логичнее.
class B {
function arr() {
return [
'i' => 0b101,
'f' => function () {
return ['i' => 1];
}
];
}
}
var_dump((new b)->arr()['i']); // works!
var_dump(call_user_func((new b)->arr()['f'])['i']); // still works…
var_dump((new b)->arr()['f']()); // don't :(В примере дан класс «B», метод «arr» которого возвращает массив из двух элементов. По индексу «i» там число, по «f» — анонимная функция, которая так же возвращает массив. В новом (5.4) ПХП есть возможность получить элемент массива, возвращаемый функцией, не присваивая его переменной (и, кстати, вызвать метод объекта сразу после его создания).
Но увы, пока нельзя так же вольно обращаться с функциями, приходится их оборачивать в «call_user_func». Но я рад, что ПХП постепенно избавляется от своих болезней.
Обратите внимание на более короткий синтаксис массивов. Это начинает походить на своеобразный стандарт уже.
Комментарии 8
Синтаксис массивов клёвый, только его пока phpstorm не понимает
в моем варианте можно сделать затычку через __call и там вызвать
но идея, да, одна — что любая ссылка на функцию должна вести себя как функция
в php пространство имён методов отделено от пространства имён свойств. ломать это врядли станут
1. запустить метод если есть
вставить это -> 2. запустить свойство если есть и is_callable
3. __call()
или
phpStorm 4.0 EAP уже все из 5.4 умеет.