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». Но я рад, что ПХП постепенно избавляется от своих болезней.

Обратите внимание на более короткий синтаксис массивов. Это начинает походить на своеобразный стандарт уже.
22 марта 2012 20:01

SunChaser (sunchaser.info)
23 марта 2012, 11:05

С функциями пока беда и в более простых случаях — http://sunchaser.info/2012/03/22/zabavno.html

Синтаксис массивов клёвый, только его пока phpstorm не понимает

bolk (bolknote.ru)
23 марта 2012, 11:45, ответ предназначен SunChaser (sunchaser.info):

Это ровно тот же случай, про который я говорю, просто он у меня в составе более сложного кода :) Но ваш пример более наглядный.

SunChaser (sunchaser.info)
23 марта 2012, 15:29, ответ предназначен bolk (bolknote.ru):

почти ))
в моем варианте можно сделать затычку через __call и там вызвать call_user_func($this->$method)

но идея, да, одна — что любая ссылка на функцию должна вести себя как функция

jimidini (jimidini.ya.ru)
23 марта 2012, 16:38, ответ предназначен SunChaser (sunchaser.info):

в php пространство имён методов отделено от пространства имён свойств. ломать это врядли станут

SunChaser (sunchaser.info)
23 марта 2012, 17:14, ответ предназначен jimidini (jimidini.ya.ru):

это необязательно ломать. например можно изменить алгоритм проверки
1. запустить метод если есть
вставить это -> 2. запустить свойство если есть и is_callable
3. __call()

bolk (bolknote.ru)
23 марта 2012, 18:38, ответ предназначен jimidini (jimidini.ya.ru):

Можно попробовать сделать так:

$a->method();
$a->{prop}();

или

$a->method();
($a->prop)();

Олег Горбунов (инкогнито)
24 марта 2012, 10:00, ответ предназначен SunChaser (sunchaser.info):

phpStorm 4.0 EAP уже все из 5.4 умеет.

SunChaser (sunchaser.info)
24 марта 2012, 21:28, ответ предназначен Олегу Горбунову

в 116.101 был багос с массивами. сейчас посмотрю. может в 117.чётам исправили

Ваше имя или адрес блога (можно OpenID):

Текст вашего комментария, не HTML:

Кому бы вы хотели ответить (или кликните на его аватару)