Main > PHP > Вышел PHP 5.4.0

Вышел PHP 5.4.0

02.03.2012 0 comments » Views: 2,031

PHP

Прокомментирую то, о чем знаю..

  • Removed legacy features (Удаленные фишки)

    • break/continue $var syntax.
      Убрали возможность делать так:

      т.е. в break нельзя передавать переменную, но возможность передать число осталась:
    • Safe mode and all related ini options.
      Эта опция позволяла ограничивать юзеров на уровне php, и хотя это надо делать не на уровне php, многие хостеры её использовали. Ну что же, теперь: пока-пока! Подробнее про эту опцию написано тут: Безопасный режим
    • register_globals and register_long_arrays ini options.
      Это мне нравится. Первая, во включенном состоянии позволяла, переданные в переменную данные, например, get запросом, автоматически конвертировать в переменные внутри скрипта, с именем переданным в параметрах. Вторая позволяла включить старый синтаксис предопределенных массивов: $HTTP_ИМЯ_VARS.Например: $HTTP_SERVER_VARS. Напомню, что их заменили на короткие названия в версии 4.1, т.е. теперь они доступны, например так $_SERVER.
    • import_request_variables().
      Эта штука импортировала  переменные $_GET, $_POST и $_COOKIE в глобальную область видимости. Т.е. из той же оперы что и register_globals.
    • allow_call_time_pass_reference.
      Эта директива, позволяла определить включена ли возможность  передачи аргументов по ссылке во время вызова функции. Удалена, потому что передачу по ссылке тоже убрали.
    • session_is_registered(), session_register() and session_unregister() functions.
      Устаревшие функции по работе с сессиями
    • magic_quotes_gpc, magic_quotes_runtime and magic_quotes_sybase ini options. get_magic_quotes_gpc, get_magic_quotes_runtime are kept but always return false, set_magic_quotes_runtime raises an E_CORE_ERROR.
      Вот это отличная новость. Давно уже все согласились, что это лишняя возможность (авто добавление слеша к кавычкам), но все равно переодически, встречается на серверах. Ура, ура, ура!!!
    • Removed support for putenv("TZ=..") for setting the timezone.
      Стало нельзя задавать временную зону через переменную окружения TZ
    • Removed the timezone guessing algorithm in case the timezone isn't set with date.timezone or date_default_timezone_set(). Instead of a guessed timezone, "UTC" is now used instead.
      Вместо угадывания часовой зоны, в случае если она не задана через date_default_timezone_set() или в INI файле с помощью дерективы date.timezone, используется время UTC
    • есть еще несколько изменений, которые мне не так интересны, смотрите их по ссылке выше..
  • General improvements (Основные улучшения)
    • Added short array syntax support ([1,2,3]), see UPGRADING guide for full details.
      Добавили возможность чуть по другому создавать массивы - укоротили синтаксис
    • Added binary numbers format (0b001010).
      Теперь можно использовать бинарные числа. Удобно для работы с масками.
    • Added support for Class::{expr}() syntax.
    • Added multibyte support by default. Previously php had to be compiled with --enable-zend-multibyte. Now it can be enabled or disabled through zend.multibyte directive in php.ini.
      Вот это отличная новость. Говорящая о том, что поддержки мультибайтовых строк (например urtf8) сделали по-умолчанию. Теперь не надо думать когда использовать strlen, а когда mb_strlen
    • Removed compile time dependency from ext/mbstring.
      Пока-пока функции семейства mb_*
    • Added support for Traits.
      Говорят это хорошая весть, для тех кто ждал этого функционала. Для меня особой радости нет. Почитать что это такое можно в гугле. Я же согласен с комментатором gnomeby на хабре:

      При всём при том, что PHP мой основной язык, я жду двух вещей от типажей:
      * Новый тип говнокода с типажами, в котором будет сложно разобраться.
      * Малая распространенность типажей, ибо не понятно зачем они нужны (для множественного наследования говорите? Как часто это вам надо?).

      Полное описание этого чуда тут: Traits - Reuse of Behavior

      Пример кода:


      Результат:
    • Added closure $this support back.
      Про это много не скажу. Знаю только что замыкания (closure) добавили в версии 5.3 и если я не ошибаюсь они нужны для доступа к переменным родительской функции, которая вернула в качестве результата работы, ссылку на свою внутреннюю функцию. Ога, я тоже никогда не сталкивался с использованием таких подходов..
      Но кому интересно, можно почитать тут: Замыкания в php
    • Added array dereferencing support.
      Это отличная вещь. Позволяющая не создавать отдельных переменных, для использования массивов:
    • Added callable typehint.
      Добавлена возможность указать тип передаваемого объекта в функции как callable, что подразумевает под собой метод который можно вызвать.
      Тестовый пример:

    • Added class member access on instantiation (e.g. (new foo)->bar()) support.
      Тоже хорошее известие. Теперь можно вызывать методы безымянных классов.
    • <?= is now always available regardless of the short_open_tag setting.
      Вот это тоже мега шаг! На многих хостингах встречается short_open_tag=off. Поэтому такое там переставало работать <?='abc'?>, и приходилось все эти конструкции заменять на <?php echo 'abc';?> и когда у тебя скрипт использует 20-50 шаблонов, то менять очень гемморойно. Конечно им надо было бы вообще заменить <?php на <? по-умолчанию. А то теперешняя ситуация, еще больше запутает неопытных людей: <?=$i++?> работает, а <? $i++?> нет...
    • Changed default value of "default_charset" php.ini option from ISO-8859-1 to UTF-8.
      Теперь по-умолчанию все будет работь с utf8, Ура, ура, ура!!!
    • есть еще несколько изменений, которые мне не так интересны, смотрите их по ссылке выше..
  • Improved CLI SAPI
    • Added built-in web server that is intended for testing purpose.
      Добавили встроенный веб-сервер для тестирования скриптов. Не Apache, но работает 🙂

Author: | Rating: 4/5 | Tags:

Leave a Reply

Your email address will not be published. Required fields are marked *

Allowed HTML-tags: <a>, <code>, <i>, <em>, <strong>, <b>, <u>, <strike>