Новое в PHP 5.4

  • написал: MpaK
  • 523
Здесь мы уже попробовали поставить новую версию PHP 5.4 теперь самое время опробовать изменения и новинки в деле, чтобы понять где и как они могут нам пригодится.

Сначала о мелких изменениях, но о которых уже стоит знать и помнить.
  • наконец-то убрали опцию в php.ini «Register globals» теперь нет автоматической регистрации переданных переменных
  • убрали так же «magic quotes» и в наших placeholder'ах больше нет нужды эту директиву проверять, php больше не экранирует кавычки без вашего ведома
  • удалили «safe mode»

  • теперь директивам языка «break/continue» нельзя указывать переменную $var на сколько уровней прерваться или продолжить, директивы $var = 10; break $var; больше не работают, теперь только константа в коде break 10;
  • убрали в php.ini директиву «allow_call_time_pass_reference» как избыток прошлого PHP 4
  • теперь по умолчанию «default_charset» равен «UTF-8»
  • расширение ext/sqlite перенесли в Pecl
  • и весть для пользователей Windows XP и 2003 то для них PHP 5.4 будет последним выпуском для этих OS, в дальнейшем бинарники собирать под них не будут

Теперь о новинках языка.

Массивы

Появилась сокращенная версия для работы с массивами, что в целом стало логичнее и удобнее.
$a = [];
$a[] = [ 'user'=>'MpaK', 'id'=>1 ];
$a[] = [ 'user'=>'UfaCode', 'id'=>2 ];
print_r( $a );


Так же давно напрашивалось из синтаксиса других языков (Perl, Ruby) что работать напрямую с массивом результатов функции или метода.
function get_users(){
	$a = [];
	$a[] = [ 'user'=>'MpaK', 'id'=>1 ];
	$a[] = [ 'user'=>'UfaCode', 'id'=>2 ];
    return $a;
}
echo get_users()[0]['user'];


Trait

Очень вкусная новинка в языке, схожее мне удавалось видеть в виде миксинов языка Ruby. То есть позволяет подмешивать методы одного класса к нашему другому классу, после чего методы становятся словно «родными» $this.
// класс для подмешивания
trait Sortable{
    public function up(){
        array_push( $this->users, array_shift( $this->users ) );
    }
    public function down(){
        array_unshift( $this->users, array_pop( $this->users ) );
    }
}

class UsersModel{
    // как раз подмешиваем в наш класс
    use Sortable;
    protected $users = array();
    public function __construct( $users=[] ){
	    $this->users   = $users;
    }
    public function dump(){
        print_r( $this->users );
    }
}

$db = [];
$db[] = [ 'user'=>'MpaK', 'id'=>1 ];
$db[] = [ 'user'=>'UfaCode', 'id'=>2 ];

$users = new UsersModel( $db );
$users->dump();

$users->up();
$users->dump();

$users->down();
$users->dump();

Подробнее почитать о trait можно здесь, как использовать, как решать конфликты и т.п.

Web-server

В общем-то всегда PHP отличался тем, что пытался взять лучшее у других языков и соседних технологий, местами хотя и через чур, но рациональные вещи были. Вот и встроенный веб-сервер по аналогии с современными языками Ruby и Python, правда выглядит это немного коряво, так как всё же в этих языках веб-серверы написаны на самом языке и ставятся как пакеты, а не часть языка интерпретатора, ну да ладно, пользоваться можно и теперь нет необходимости ставить Apache, чтобы потестировать какое-то веб-приложение.

Вариантов запуска веб-сервера не много.
Запуск из текущей директории
php -S localhost:4567 public_html/

после чего можно в браузере набирать localhost:4567/1.php работая словно в настоящем веб окружении
или же использовать свой Bootstrap Routing файл разбирая на начальном старте $_SERVER[«REQUEST_URI»]
php -S localhost:4567 public_html/router.php

посмотреть примеры можно здесь

Подводя итог для меня лично эти изменения очень внушительные, приятнее и стало работать с массивами, теперь можно баловаться с подмешиванием на грани мультинаследования (главное не перебарщивать), отлаживать без apache свои скрипты и радоваться улучшенной поддержки utf-8.

2 комментария

avatar
  • hudson
  • 0
А вот меня такой вопрос интересует: что сталось с APC? Расширения такого больше нет в архиве (win). Вроде как его должны были включить в ядро, но в официальной документации я этого не нашёл.

p.s. ещё и eAccelerator похоже скорее мёртв чем жив…
avatar
  • MpaK
  • 0
С кэшами да, похоже они с APC не успели включить. А все остальные как XCache, eAccelerator (сайт вообще не живой) пока не успевают за релизами.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.