PHP 5.5: Основные нововведения
PHP 5.5 делает итерацию без раздувания памяти обычным делом за счёт генераторов (yield), добавляет finally, вводит штатное API паролей и мелкие, но полезные вещи вроде array_column() и SomeClass::class. Параллельно в типичных сборках появляется Zend OPcache — меняется профиль производительности и порядок «подхвата» изменений кода после деплоя.
Чеклист: migration55.
Содержание
- Генераторы
finally- Хеширование паролей
- Помощники
- OPcache
- Практические рецепты
- Обратная несовместимость
- Deprecated
- Прочее
Генераторы
function lines($path)
{
$fh = fopen($path, 'rb');
try {
while (($line = fgets($fh)) !== false) {
yield rtrim($line, "\r\n");
}
} finally {
fclose($fh);
}
}
finally
Выполняется после try/catch даже при return или исключении — удобно закрывать ресурсы.
Хеширование паролей
$hash = password_hash($plain, PASSWORD_DEFAULT);
if (password_verify($plain, $hash) && password_needs_rehash($hash, PASSWORD_DEFAULT)) {
$hash = password_hash($plain, PASSWORD_DEFAULT);
}
Помощники
array_column() вытаскивает столбец из массива строк; ClassName::class даёт строку с FQCN без ручного дублирования имени.
OPcache
При включении кешируется байткод — после выкладки может понадобиться сброс кеша или перезапуск PHP-FPM.
Практические рецепты
Большие файлы читайте построчно через yield, а не file(). На входе пользователя перехешируйте пароль при password_needs_rehash.
Обратная несовместимость
См. migration55 incompatible: нюансы foreach и list() во вложенных конструкциях; изменения в обёртках над GD/intl/openssl; не используйте class как незакавыченную константу в древнем коде.
Deprecated
mysql, модификатор /e у preg_replace — см. migration55 deprecated.
Прочее
Расширено поведение empty() для выражений — прогоните тесты вокруг форм и валидации.
Итог
Сначала освойте генераторы и password_*, закройте mysql, затем переходите к вариадике и ** в 5.6.