Вышел PHP 5.4, что нового?

Вышел PHP 5.4, что нового? После долгих, мучительных выпусков релиз-кандидатов, PHP сообщество разрадилось следующей мажорной версией PHP.

Главным изменением я бы назвал появление Traits. Это специальная структура позволяющая множественное наследование классом. В других языках это часто называется mixins (примеси). Для маленьких проектов это совершенно ненужная вещь, однако для больших систем, с кучей повторного использования кода, traits будут очень полезными.

Простейший пример, который показывает как это работает:

<?php

trait Hello
{
    public function sayHello()
    {
        echo 'Hello ';
    }
}

trait World
{
    public function sayWorld()
    {
        echo 'World';
    }
}

class HelloWorld
{
    use Hello, World;

    public function sayHelloWorld()
    {
        echo $this->sayHello() . $this->sayWorld() . '!';
    }
}

$o = new HelloWorld();
$o->sayHelloWorld(); // выведет на экран "Hello World!"

?>

С traits могут появится общие реализации всяких паттернов проектирования, которые не будут мешать общему наследованию классов. Например, удобно будет сделать trait Singleton и использовать его там где нужно.

Остальные изменения я бы не назвал глобальными, скорее это небольшие улучшения синтаксиса и увеличение производительности. Хотя, можно отдельно сказать про встроенный в PHP веб-сервер. Думаю он будет полезен исключительно в процессе разработки. Запускается из терминала достаточно просто:

php -S localhost:3000

Правда немного напрягает что нужно писать отдельный класс для роутинга статических файлов и запускать его потом таким образом:

php -S localhost:3000 router.php

Примеры как писать такой файл можно посмотреть в документации.

Небольшие улучшения

  • Короткая форма записи массивов, прямо из JavaScript приехала видимо ☺

    $array = ['php', 'mysql', 'apc'];
  • Вызов элемента массива возвращаемого функцией напрямую

    foo()[0];
  • Вызов метода класса без присвоения класса переменной

    (new Foo)->bar();
  • Вызов <?=$variable?> теперь возможен при выключенном short_open_tag
  • E_STRICT теперь входит в E_ALL

Один момент я так и не понял, в одной из beta-версий был scalar typehints я даже писал о нем в том году, однако в changelog я так и не смог найти упоминания о нем. Если его и правда убрали, то зачем?

Так же очень радует что выкинули большинство legacy функций и настроек, например magic_quotes, safe_mode, register_globals, y2k_compliance удалены из языка. Во всех расширениях использующих MySQL работа теперь идет через MySQL Native Driver.

Что ждать дальше?

В данный момент идет активная чистка багов. 38 ошибок уже исправлено и так как вышел PHP 5.4.1 RC1, ожидаем скорого релиза следующей версии. Кстати, в языке с релизом PHP 5.4.1 будет поддержка Apache 2.4, выходу которого я на днях очень удивился в Twitter.

В то же время началась работа над следующей мажорной версией PHP 5.5 или 6.0 — толком чего ожидать пока не ясно, но можно следить за развитием здесь.

Наверное я не на все моменты обратил внимания, если пропустил что-то интересное, напишите мне об этом.

Что ещё почитать?

← Установка PHP 5.4 на OS X LionЧто мне дал 2011 год →