Комментарии 71
Отлично! Поговаривают, что APC под никсами с 5.4 всё-таки завёлся.
Хорошая новость, мои поздравления!
Короткий синтаксис массивов — мелочь, а приятно :)
Короткий синтаксис объявления массива это ладно, мелочь, но вот array dereferencing это круто.
Поясню на всякий случай отдельно для тех кто будет читать камент. В общем теперь если функция возвращает массив массив и точно известен нужный ключ в тем, то можно обойтись без временной переменной. Было:
, стало:
Поясню на всякий случай отдельно для тех кто будет читать камент. В общем теперь если функция возвращает массив массив и точно известен нужный ключ в тем, то можно обойтись без временной переменной. Было:
$temp = foo(); // array
$var = $temp['key'];
, стало:
$var = foo()['key'];
а вкупе с class member access on instantiation и короткими синтаксисом массивов — вообще можно забавные вещи городить)
$x = (new Foo([1,2,3]))->bar()[0]
всегда интересовало, почему как к объекту можно обращаться, а как к массиву нет :) но я еще нуб, так что вполне себе может быть что и оправданно было.
Потому что просто не реализовали.
На самом деле к объекту как к массиву можно обращаться (вплоть до этого, что функции/языковые_конструкции по работе с массивами работают и с объектом). Достаточно расширить Iterator, Countable, ArrayAccess интерфейсы ("Iterator, ArrayAccess, Countable: Объект как массив"). Но даже для таких объектов такой синтаксис не применим.
На самом деле к объекту как к массиву можно обращаться (вплоть до этого, что функции/языковые_конструкции по работе с массивами работают и с объектом). Достаточно расширить Iterator, Countable, ArrayAccess интерфейсы ("Iterator, ArrayAccess, Countable: Объект как массив"). Но даже для таких объектов такой синтаксис не применим.
Traits тоже.
Теперь нет нужды городить огород для реализации Facade Pattern.
Теперь нет нужды городить огород для реализации Facade Pattern.
А так же:
Конечно, много ещё других вкусностей, но эти на практике больше всего пригодились)
- вернули $this/self в анонимные функции (ура!)
- добавили флаги в json_encode. Особо интересны JSON_PRETTY_PRINT, JSON_UNESCAPED_UNICODE
- добавили JsonSerializable интерфейс, сам знаете зачем
- Добавили флаги мультикаста у сокетов
- debug_backtrace теперь можно ограничить
- Числа можно записывать в бинарном виде 0b1010110. Идеально для битовых масок.
- Добавлен callable type hint для функций (уж лучше бы завели тип переменной callback).
- (new foo)->bar()
- func()[3]
- поддержка DTrace для PHP-магов 80го уровня
Конечно, много ещё других вкусностей, но эти на практике больше всего пригодились)
Класс, особенно ждал вот этого:
вернули $this/self в анонимные функции
(new foo)->bar()
а я все жду когда можно будет вместо substr писать $varstring[5:3], как в питоне.
а если $varstring ассоциативный массив?
тогда уж так:
$varstring{5:3};
// or
$varstring{5,3};
не логично, если уж мы обращаемся к элементам массива через квадратные скобки, то и интервалы получать стоит тем же образом.
Разъясните пожалуйста строку «The break/continue $var syntax was removed»
Приношу извинения, снимаю вопрос. Раньше можно было сделать
а сейчас это убрали видимо.
$var = 10;
break $var; // выйти из вложенных циклов на 10 уровней выше
а сейчас это убрали видимо.
а что то в замен дали?
Вам действительно это нужно?
да, это было удобно.
Вы это серьёзно? Можете привести пример (ссылку, можно в личку)? Мне правда интересно где это может понадобиться? Спасибо
Вы не путаете “break 10;” и “$var = 10; break $var;”? Убрали только второе, первое осталось.
удалили возможность использовать динамическую переменную, статические значения будут работать.
т. е.
т. е.
break 2;
— будет работатьbreak($var) не работает
Отличная новость! Я уж думал, этот день не наступит :) Поздравляю коллег.
Все замечательно, но только чем им Passing by Reference не угодил, что они решили его убрать?!
С 5 версии PHP висит уже как deprecated. Конечно надо убрать. А зачем passing by reference? Вы на 4 пыхе еще пишете?
Посыпаю голову пеплом, не так понял — думал вы о $foo = &new Foo().
А где написано, что убрали? Ничего такого не нашел в ChangeLog'е и на страничке, котору вы привели ничего такого нет, что с версии 5.4 так нельзя будет делать.
А где написано, что убрали? Ничего такого не нашел в ChangeLog'е и на страничке, котору вы привели ничего такого нет, что с версии 5.4 так нельзя будет делать.
В ченжлоге речь не о passing by reference, а о call-time passing by reference, который был deprecated и бросал предупреждение уже достаточно давно. Это значит, что когда функция использует ссылки в параметрах, они должны быть объявлены в коде функции, а не вызова. Другими словами, вместо «function f($a) {}; f(&b);» нужно делать «function f(&$a) {}; f($b);».
Теперь, когда имеется встроенный веб-сервер, ждем portable версию.
Веб-сервер это, кончено, круто, но вот того что там нет реврайтов это очень плохо. Ни один наш проект на этом веб-сервере не заведется. И смысл тогда в нём? Необходима доработка
Я так понял, что все вокруг самописного index.php вертится. В нем и придется самостоятельно mod_rewrite эмулировать…
Это сервер не для «проектов». Он для демонстрации и отладки.
Ну и вообще, любые современные фреймворки сами роутят запросы.
Ну и вообще, любые современные фреймворки сами роутят запросы.
прикольно :)
Шестёрки, по всему, не будет, так будет хоть 5.4.
offtop: мне сейчас в Arduino для реализации задачи не хватает 1 кб памяти (там всего 2).
Ноый slide от Ilia Alshanetsky: ilia.ws/files/confoo_php54.pdf
Добавили бы срезы ещё в питоновском стиле. Намного короче и красивее выглядит чем array_slice.
Кстати, никто не сказал, что короткий синтаксис echo, который
<?= $variable ?>
уже не зависит от short_tags и работает всегда.Сегодня PHP 5.4 исполнилось годик :)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Наконец-то вышел php 5.4