PHP 5.4 alpha

Итак, потрясшая весь мир радостная весть — вышла альфа PHP 5.4. Такими темпами есть надежда, что не пройдёт и десяти лет, как появится стабильный релиз.

Данная новость обсосана уже множество раз и ещё раз повторять это смысла никакого нет. Но так, как я давно ничего не писал в этот бложик, нужно начать возвращение хоть с чего-нибудь.

Какие же прелести нас ожидают:

1. Traits: сколько бы задроты «чистого ООП» не гневались, а вещь в умелых и умеренных руках вполне себе полезная. Реализация опять может вызывать вопросы, но всё же лучше, чем ничего.

2. Array dereferencing: всего пяток лет обещаний и вот оно. Вот так вот уже было можно: func()->method(), вот так тоже: $A['var'], и даже так: $A['var'](). Теперь можно так: func()['var]. Ещё пара нововведений и пых обгонит питон по языковым плюшкам.

Единственно может напрягать тот факт, что обязательно найдётся большое количество индивидуумов, которые начнут делать следующее:

function get($id) {
    // Дикий запрос в базу
}
 
echo 'Имя: '.get(1)['name'];
echo 'Фамилия: '.get(1)['surname'];
echo 'Вся фигня: '.get(1)['fignya'];

Ведь зачем вводить промежуточную переменную, когда можно без неё. Синтаксический сахар же.
Впрочем, это уже проблемы этих индивидуумов.

3. Поддержка DTrace: несомненно отличнейшая вещь, которая сделает нашу жизнь намного лучше.
А может и не сделает. Я, если честно, вообще не знаю, что это такое.

Но возможность писать вместе с PHP на языке D, который совсем не тот язык D, а совсем другой язык D, конечно доставляет.

4. Чистка мусора: register_globals, allow_call_time_pass_reference, register_long_arrays, session_is_regisitered(), session_registered(), session_unregister().

Давно пора, но единственно печалит удаление allow_call_time_pass_reference. Это, когда разрешается по старинке решать в момент вызова как передавать аргумент в функцию: по ссылке или по значению. Без включения этой настройки тоже разрешается, но интерпретатор начинает бурчать себе под нос про DEPRECATED.

Мне оно не нужно, но иногда приходится в чём то старом копаться. Что характерно, все остальные хреновены (register_globals, long_arrays) давно не встречаются. И в случае чего легко эмулируются. А time pass reference вылезает зачастую и так просто от него не избавишься.

4 комментария »

  • >> найдётся большое количество индивидуумов, которые начнут делать следующее

    они делают уже сейчас через свои воркэраунды дереференсинга. я знаю реально работающую с таим вот:

    function get(table, field)
    {
    a = query(select * from table)
    return a[field]
    }

    for i=0 to get(foo, count) {
    if (get(foo, a) == get(foo, b) {
    // много полезных действий
    }
    }

    согласись — очень удобно

    artoodetoo, 4.07.2011, 20:40

  • >> я знаю реально работающую с таим вот:

    арманом попахивает, ты про него? xD

    мне больше всего доставило Array dereferencing

    трайтс плохо если понимаешь что в других языках этого нет, а привыкать к каким то хуйням отдельно взятой хуйни — класть не то что грабли, целый бульдозер себе под ноги и потом убить себя им при переходе на другой язык

    phpude, 28.07.2011, 11:34

  • «Теперь можно так: func()[‘var]. Ещё пара нововведений и пых обгонит питон по языковым плюшкам.»
    тут ошибка fubc()[‘var’] :)

    lekafe, 8.08.2011, 15:17

  • Правильно дуд. Нафиг это нужно… Типа множественного наследования или расширения, только опять же через жопу. Убрали одно гавно, добавили другое. «Traits do not add runtime semantics, they only take part in the process of building a class» — лучше бы динамически тянулось. Тогда бы еще больше говнокода на php писали ))) Хотя, кому надо и так завалит их динамически, но опят же через жопу, точно также, как делают программинг в комментариях.

    kostyl, 14.08.2011, 11:42

Leave a comment