Что нового в PHP 5.4 ?

Судя по слухам, 19 января, в свет должен был выйти очередной RC PHP 5.4. Возможно даже, что он будет финальным. А это значит, что нужно скорее заняться изучением новых возможностей.

Примеси

Ключевая новинка 5.4 — примеси. Они послужат в PHP заменой мультинаследования. Каждая примесь задается отдельным «классом» через ключевое слово trait. Внутри примеси могут быть определены методы, которые станут доступны в классе, к которому будут подключены примеси. Подключение примесей происходит с помощью языковой конструкции use. Имена примесей задаются через запятую и все их методы становятся доступны внутри класса.

Если имена методов класса и примесей совпадают, то приоритетным методом станет метод класса. К сожалению, в этом случае мы не получим даже Notice.

Примесь всегда имеет доступ к классу, к которому она подключена, через конструкцию parent.

class A {
public function foo() {
return 'foo';
}
}

trait B {
public function bar() {
return parent::foo() . ' bar';
}
}

class C extends A {
use B;
}

$c = new C();
echo $c->foo(); // foo
echo $c->bar(); // foo bar

Нативная поддержка Юникода

Да-да. Больше не придется использовать расширения, вроде multibyte и ему подобных. Все строковые функции отлично понимают юникод.

Array dereferencing support

Данная возможность — краеугольный камень для многих PHP разработчиков. Как часто нам нужно дернуть нулевой индекс у метода, который возвращает массив? Насколько сильно бесит то, что эту вроде бы простую операцию приходится записывать в две строки, да еще и переменную создавать? Теперь страдать больше не придется:

function foo() {
return array(1, 2, 3);
}

echo foo()[0]; // 1

Short syntax for arrays

В PHP 5.4 теперь доступна короткая запись массива, без ключевого слова array.

// Раньше приходилось писать так:
$array = array(1, 2, 3);

// Теперь можно так:
$array = [1, 2, 3];

// И даже так:
$array = ['first' => 1, 'second' => 2];

Встроенный веб-сервер

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

php -S localhost:8000

Upload progress

Несмотря на то, что в HTML 5 File API реализован механизм отслеживания процесса загрузки файла на сервер (размер загруженной части отдает сам браузер), в PHP 5.4 появится дополнительный источник мониторинга состояния загрузки. Он будет храниться в сессии пользователя в ключе, например, upload_progress_myform и мы в любой момент сможем дернуть его Ajax’ом для захвата мира отрисовки прогресс-бара.

Вызов метода или свойства класса выражением

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

class A {
public static function foo_bar() {
return '123';
}
}

$foo = 'foo';
$bar = 'bar';

echo A::{$foo . '_' . $bar}(); // 123

Scalar type hints

PHP явно идет в сторону строгой типизации. Раньше для автоматической проверки типа в аргументах метода можно было указывать только массивы и имена классов. Теперь такая возможность распространяется на некоторые другие типы: int, float и boolean.

function foo(int $a, bool $b) {
return true;
}

Улучшена производительность @

Оператор @ служит в PHP для отключения вывода ошибок на текущей строке кода. Раньше в высоко нагруженных приложениях использовать @ было невозможно из-за довольно ощутимых тормозов. Поэтому лично я ее больше не использую нигде.

В конце-концов приглушать ошибки — это странно. Ошибки нужно исправлять или ловить Exceptions.

Deleted

Кроме того из PHP наконец-то выпилены register_globals, long_arrays и прочие директивы, заждавшиеся удаления.

Статья взята с хабра habrahabr.ru/blogs/php/136800/


Понравилась статья? Поделись с остальными.

Комментарии закрыты.