Наведение порядка в PHP (версия 5.5.0)
Нужно ещё похвалить авторов PHP за то, что они действительно стараются навести порядок в языке. С каждой версией он становится немного логичнее.
Например, теперь уже можно сделать вот так:
[
POW => function($x) { return $x*$x; },
SIN => function($x) { return sin($x); },
][$selector]
Правда, всё ещё нельзя вызвать функцию сразу. В 5.5.0 будет работать вот такая вещь:
if (empty(somefunc())) { /* … */}
Но то же самое нельзя сделать с isset, так как сложно сказать что это будет значить — в языке нет отдельного неопределённого значения переменной, она бывает только недекларированной; функция, конечно, может её вернуть, но на самом деле вернётся NULL, а isset от значения NULL — «ложь».
Появилась возможность использовать list внутри цикла следующим образом:
foreach ($somehash as list($key, $value)) { /* … */ }
И сделано ещё несколько мелочей, но работы впереди ещё много.
хорошо что отсрочили шестую версию и занялись доведением до ума пятой
2 ошибки:
«Например, теперь уже сделать вот так:»
«foreach ($somehash as list($key, $value) { /* … */ }»
Комментарий для Vereschagin Sergey:
Спасибо!
В обоих примерах не хватает закрывающих скобок? :)
По теме: не очень понятно, что должна делать такая конструкция if (isset(somefunc())) { /* … */} . isset проверяет на существование, а вот empty проверяет еще и нулевые значения, не? В таком случае всё правильно в т.ч. isset, либо я чего не то понял.
Комментарий для K!N6:
Спасибо, поправил!
Да. Что правильно? Я не понимаю что вы хотите сказать. Правильно что isset сейчас бессмысленно делать от функции? В текущем состоянии языка — да. Правильно это с точки зрения логики? Нет, неправильно. В JS есть undefined и его легко можно вернуть из функции, в том числе, попытавшись вернуть переменную, которой нет.
Фактически в php есть неопределенное значение для переменной, просто его сложно получить :) Как я понимаю, для этого нет какой то константы или типа того (как undefined в js).
Приведу пример неопределенной переменной:
public static $bar;
у меня на php 5.4.8 выводит:
Комментарий для Евгения Степанищева:
Потестил еще, оказывается в Foo::$bar обычный null. Сразу не понял мысль в посте, теперь понял) Видимо разработчики php считают, что null и есть аналог undefined в js.
А что в «foreach ($somehash as list($key, $value)) { /* … */ }» необычного?
Комментарий для K!N6:
Ничего, за исключением того, что до 5.5 так не работало.