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.
Подробности на RFC
try catch... finally
Пополнение в обработке исключений. Теперь как во всех взрослых языках
можно обработать все варианты при помощи finally
list в foreach
Разыменование константных строк/массивов
Геттеры/сеттеры для свойств
неподтверждено в релизе
PHP обзаведется гет(сет)терами в стиле C#.
От наличия такого синтаксиса get/set язык только выиграет.
Подробнее на RFC
Модификатор /e устарел
Модификатор /e (eval) в регулярных выражениях является потенциальной дырой в безопасности
скрипта, пришло время отказаться от него. Вместо eval рекомендуется использовать
preg_replace_callback. Подробнее.
Полное имя класса
Добавлено ключевое слово class (статически доступно в каждом классе)
Обращение к ClassName::class вернет полное имя класса (FQCN) - NS\ClassName
В php 5.3 обращение к сокращенному имени класса (без NS) в виде строки вызывает ошибку.
Например:
Для решения проблемы, предлагается добавить константу к классам FooBar::class,
содержанием которой будет полное имя класса (с неймспейсами).
Енд оф роад
Поддержка Windows XP, 2003 будет выпилена.
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 будет выпилена.