23 Янв
Что нового в 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/
Понравилась статья? Поделись с остальными.