Pull to refresh

Comments 71

Отлично! Поговаривают, что APC под никсами с 5.4 всё-таки завёлся.
Не так было с APC в общем под 5.4. Что-то там было недопилено и он просто не заводился. Под виндой вроде так и не заводится.
Он там отлично работает, никаких проблем не видел
Всё-таки есть проблема. На коде с ?: ломается. Вроде допиливают активно.
Dotdeb выпустил preview-пакеты. Пока отстутствуют некоторые расширения, а также патч от suhosin.
Короткий синтаксис массивов — мелочь, а приятно :)
Короткий синтаксис объявления массива это ладно, мелочь, но вот array dereferencing это круто.

Поясню на всякий случай отдельно для тех кто будет читать камент. В общем теперь если функция возвращает массив массив и точно известен нужный ключ в тем, то можно обойтись без временной переменной. Было:
$temp = foo(); // array
$var = $temp['key'];

, стало:
$var = foo()['key'];
а вкупе с class member access on instantiation и короткими синтаксисом массивов — вообще можно забавные вещи городить)
$x = (new Foo([1,2,3]))->bar()[0]
По компактности синтаксиса становиться ближе к тому же erlang, что меня лично радует.
Это не «забавная» вещь, а совершенно очевидная и широко применяющаяся во многих языках. Что PHP не понимал таких тривиальных вещей — меня сильно доканывало.

Кстати, [bar()[0]()()][0]() тоже можно?
Нет. Максимум [bar()[0]][0]();, операция ()[0]() или ()() тупо не парсится
Эх, опять полумеры… Но хоть что-то.
всегда интересовало, почему как к объекту можно обращаться, а как к массиву нет :) но я еще нуб, так что вполне себе может быть что и оправданно было.
Потому что просто не реализовали.

На самом деле к объекту как к массиву можно обращаться (вплоть до этого, что функции/языковые_конструкции по работе с массивами работают и с объектом). Достаточно расширить Iterator, Countable, ArrayAccess интерфейсы ("Iterator, ArrayAccess, Countable: Объект как массив"). Но даже для таких объектов такой синтаксис не применим.
Traits тоже.

Теперь нет нужды городить огород для реализации 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 ассоциативный массив?
получить элементы массива со сдвигом 5 в количестве трех штук.
Глупость сморозил, тогда надо нотайс кидать.
тогда уж так:
$varstring{5:3};
// or
$varstring{5,3};
не логично, если уж мы обращаемся к элементам массива через квадратные скобки, то и интервалы получать стоит тем же образом.
$str = 'Hello World';
echo $str;           // Hello World
echo $str{0};     // H
echo $str{0, 4}; // Hello


Вроде логично. С квадратными скобками будут проблемы, точнее путаница. Пусть они будут за массивами закреплены.
Разъясните пожалуйста строку «The break/continue $var syntax was removed»
Приношу извинения, снимаю вопрос. Раньше можно было сделать
$var = 10;
break $var; // выйти из вложенных циклов на 10 уровней выше

а сейчас это убрали видимо.

Вы это серьёзно? Можете привести пример (ссылку, можно в личку)? Мне правда интересно где это может понадобиться? Спасибо
На всякий случай напомню, что конструкции вида break 2 продолжают работать как и раньше, изменения коснулись только конструкций break/continue с переменными.
UFO just landed and posted this here
Вы не путаете “break 10;” и “$var = 10; break $var;”? Убрали только второе, первое осталось.
удалили возможность использовать динамическую переменную, статические значения будут работать.
т. е. break 2; — будет работать
Вообще позор мне. 4 года на php программирую, а о функциональной возможности языка узнаю только когда её удалили.
Ну может оно и к лучшему? не самая хорошая функциональная возможность языка.
Отличная новость! Я уж думал, этот день не наступит :) Поздравляю коллег.
А нет, это же RC8. Простите.
С 5 версии PHP висит уже как deprecated. Конечно надо убрать. А зачем passing by reference? Вы на 4 пыхе еще пишете?
Посыпаю голову пеплом, не так понял — думал вы о $foo = &new Foo().
А где написано, что убрали? Ничего такого не нашел в ChangeLog'е и на страничке, котору вы привели ничего такого нет, что с версии 5.4 так нельзя будет делать.
В ченжлоге речь не о passing by reference, а о call-time passing by reference, который был deprecated и бросал предупреждение уже достаточно давно. Это значит, что когда функция использует ссылки в параметрах, они должны быть объявлены в коде функции, а не вызова. Другими словами, вместо «function f($a) {}; f(&b);» нужно делать «function f(&$a) {}; f($b);».
Большое спасибо за пояснение. Я думал они впринципе выпилили эту возможность.
Я тоже не на шутку перепугался.
* откладывает валидол *
Теперь, когда имеется встроенный веб-сервер, ждем portable версию.
UFO just landed and posted this here
Сабжа, естественно :) Не надо хитрые комбинации из апачей городить, чистый PHP и все.
UFO just landed and posted this here
Веб-сервер это, кончено, круто, но вот того что там нет реврайтов это очень плохо. Ни один наш проект на этом веб-сервере не заведется. И смысл тогда в нём? Необходима доработка
Я так понял, что все вокруг самописного index.php вертится. В нем и придется самостоятельно mod_rewrite эмулировать…
UFO just landed and posted this here
UFO just landed and posted this here
Это сервер не для «проектов». Он для демонстрации и отладки.

Ну и вообще, любые современные фреймворки сами роутят запросы.
Вы молодцы, быстро отреагировали :) Надеюсь, остальные хостеры тоже последуют вашему примеру.
Шестёрки, по всему, не будет, так будет хоть 5.4.
offtop: мне сейчас в Arduino для реализации задачи не хватает 1 кб памяти (там всего 2).
Добавили бы срезы ещё в питоновском стиле. Намного короче и красивее выглядит чем array_slice.
Кстати, никто не сказал, что короткий синтаксис echo, который
<?= $variable ?>
уже не зависит от short_tags и работает всегда.
Sign up to leave a comment.

Articles