Вышел 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 — толком чего ожидать пока не ясно, но можно следить за развитием здесь.
Наверное я не на все моменты обратил внимания, если пропустил что-то интересное, напишите мне об этом.