PHP 5.5 что нового

Категория: / DEV Блог / PHP (LAMP)
2013.06.20 - Релиз PHP 5.5.0
2012.11.15 - Релиз PHP 5.5.0 alpha1.

Новый функционал для работы с паролями

Текущая реализация генерации пароля в большинстве проектов стоится на не стойких
алгоритмах типа md5, sha1. В php5.5 предлагается улучшить парольный API.
Подробнее

Генераторы

Генераторы - простой способ реализации итератора, позволяющий сократить потребляемую итератором память до размера одного элемента массива,
вместо загрузки в память всего массива для его обхода.

Подробнее

empty() заставят работать с функциями и выражениями

В настоящий момент empty($this->getBlah()) вызовет фатальную ошибку.

Скалярные тайпхинты!

неподтверждено в релизе

Дождались.. PHP, язык с отсутствующей типизацией параметров возможно обзаведется
уточнениями типов (typehints) для простых типов int, float, bool, string.

function foo(int $a) {
        var_dump($a);
    }
    foo(1); // int(1)
    foo("1"); // int(1)
    foo(1.0); // int(1)
    foo("1a"); // Notice: A non well formed numeric value encountered int(1)
    foo("a"); // E_RECOVERABLE_ERROR
    foo(999999999999999999999999999999999999); // E_RECOVERABLE_ERROR (since it's not exactly representable by an int)
    foo(1.5); // E_RECOVERABLE_ERROR
    foo(array()); // E_RECOVERABLE_ERROR
    foo(new StdClass); // E_RECOVERABLE_ERROR


Подробности на RFC

try catch... finally

Пополнение в обработке исключений. Теперь как во всех взрослых языках
можно обработать все варианты при помощи finally

list в foreach

$a = array(array('name' => 'me', 'login' => 'me2'));
 
foreach ($a as list($name, $login)) {
}


Разыменование константных строк/массивов

echo array(1, 2, 3)[0]; //output 1
echo "foobar"[2]; //output o
echo "foobar"["foo"][0] // output f
 
echo [1,3,4][2]; //output 4


Геттеры/сеттеры для свойств

неподтверждено в релизе

PHP обзаведется гет(сет)терами в стиле C#.
От наличия такого синтаксиса get/set язык только выиграет.

class TimePeriod {
    private $Seconds;
 
    public $Hours {
        get { return $this->Seconds / 3600; }
 
        // переменная $value содержит значение, которое необходимо установить
        set { $this->Seconds = $value * 3600; }
    }
}
 
// Доступ к свойству такой же как и к члену класса
$time = new TimePeriod();
$time->Hours = 12;  // запишем 43200 в $time->seconds
echo $time->Hours;  // выведем 12


Подробнее на RFC

Модификатор /e устарел

Модификатор /e (eval) в регулярных выражениях является потенциальной дырой в безопасности
скрипта, пришло время отказаться от него. Вместо eval рекомендуется использовать
preg_replace_callback. Подробнее.

Полное имя класса

Добавлено ключевое слово class (статически доступно в каждом классе)

Обращение к ClassName::class вернет полное имя класса (FQCN) - NS\ClassName

В php 5.3 обращение к сокращенному имени класса (без NS) в виде строки вызывает ошибку.

Например:

use Some\Deeply\Nested\Namespace\FooBar;
 
// не найдет класс, так как `FooBar` будет искаться в глобальном контексте
$reflection = new ReflectionClass('FooBar');


Для решения проблемы, предлагается добавить константу к классам FooBar::class,
содержанием которой будет полное имя класса (с неймспейсами).

use Some\Deeply\Nested\Namespace\FooBar;
 
// этот пример работает, FooBar::class резолвится в Some\Deeply\Nested\Namespace\FooBar
$reflection = new ReflectionClass(FooBar::class);


Енд оф роад

Поддержка Windows XP, 2003 будет выпилена.