Наведение порядка в 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)) { /* … */ }
И сделано ещё несколько мелочей, но работы впереди ещё много.
21 ноября 2012 12:00

BOLVERIN (инкогнито)
22 ноября 2012, 00:29

хорошо что отсрочили шестую версию и занялись доведением до ума пятой

Vereschagin Sergey (инкогнито)
23 ноября 2012, 08:40

2 ошибки:
"Например, теперь уже сделать вот так:"
"foreach ($somehash as list($key, $value) { /* … */ }"

bolk (bolknote.ru)
23 ноября 2012, 08:41, ответ предназначен Vereschagin Sergey

Спасибо!

K!N6 (инкогнито)
12 декабря 2012, 22:41

if (empty(somefunc()) { /* … */}
foreach ($somehash as list($key, $value) { /* … */ }
В обоих примерах не хватает закрывающих скобок? :)

По теме: не очень понятно, что должна делать такая конструкция if (isset(somefunc())) { /* … */} . isset проверяет на существование, а вот empty проверяет еще и нулевые значения, не? В таком случае всё правильно в т.ч. isset, либо я чего не то понял.

bolk (bolknote.ru)
13 декабря 2012, 06:39, ответ предназначен K!N6

В обоих примерах не хватает закрывающих скобок? :)
Спасибо, поправил!
isset проверяет на существование, а вот empty проверяет еще и нулевые значения, не? В таком случае всё правильно в т.ч. isset, либо я чего не то понял.
Да. Что правильно? Я не понимаю что вы хотите сказать. Правильно что isset сейчас бессмысленно делать от функции? В текущем состоянии языка — да. Правильно это с точки зрения логики? Нет, неправильно. В JS есть undefined и его легко можно вернуть из функции, в том числе, попытавшись вернуть переменную, которой нет.

K!N6 (инкогнито)
13 декабря 2012, 15:10

Фактически в php есть неопределенное значение для переменной, просто его сложно получить :) Как я понимаю, для этого нет какой то константы или типа того (как undefined в js).
Приведу пример неопределенной переменной:
class Foo {
public static $bar;
}
echo 'empty(Foo::$bar) = '.(empty(Foo::$bar) ? 'true' : 'false')."\n";;
echo 'isset(Foo::$bar) = '.(isset(Foo::$bar) ? 'true' : 'false')."\n";
$test = Foo::$bar;
echo 'empty($test) = '.(empty($test) ? 'true' : 'false')."\n";
echo 'isset($test) = '.(isset($test) ? 'true' : 'false')."\n";
у меня на php 5.4.8 выводит:
empty(Foo::$bar) = true
isset(Foo::$bar) = false
empty($test) = true
isset($test) = false

K!N6 (инкогнито)
13 декабря 2012, 16:15, ответ предназначен bolk (bolknote.ru):

Потестил еще, оказывается в Foo::$bar обычный null. Сразу не понял мысль в посте, теперь понял) Видимо разработчики php считают, что null и есть аналог undefined в js.

А что в "foreach ($somehash as list($key, $value)) { /* … */ }" необычного?

bolk (bolknote.ru)
14 декабря 2012, 08:00, ответ предназначен K!N6

А что в «foreach ($somehash as list($key, $value)) { /* … */ }» необычного?
Ничего, за исключением того, что до 5.5 так не работало.

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

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

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