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». Но я рад, что ПХП постепенно избавляется от своих болезней.
Обратите внимание на более короткий синтаксис массивов. Это начинает походить на своеобразный стандарт уже.
С функциями пока беда и в более простых случаях — http://sunchaser.info/2012/03/22/zabavno.html
Синтаксис массивов клёвый, только его пока phpstorm не понимает
Комментарий для sunchaser.info:
Это ровно тот же случай, про который я говорю, просто он у меня в составе более сложного кода :) Но ваш пример более наглядный.
Комментарий для Евгения Степанищева:
почти ))
в моем варианте можно сделать затычку через __call и там вызвать call_user_func($this->$method)
но идея, да, одна — что любая ссылка на функцию должна вести себя как функция
Комментарий для sunchaser.info:
в php пространство имён методов отделено от пространства имён свойств. ломать это врядли станут
Комментарий для jimidini.ya.ru:
это необязательно ломать. например можно изменить алгоритм проверки
вставить это -> 2. запустить свойство если есть и is_callable
Комментарий для jimidini.ya.ru:
Можно попробовать сделать так:
$a->method();
$a->{prop}();
или
$a->method();
($a->prop)();
Комментарий для sunchaser.info:
phpStorm 4.0 EAP уже все из 5.4 умеет.
Комментарий для Олег Горбунов:
в 116.101 был багос с массивами. сейчас посмотрю. может в 117.чётам исправили