PHP 5.4: Основные нововведения
PHP 5.4 добавляет трейты для горизонтального переиспользования методов, облегчает массивы записью [], позволяет сразу индексировать результат функции, переносит $this в замыкания и даёт встроенный сервер php -S для разработки. Это ещё и санитарный релиз: magic quotes, register_globals и safe_mode удалены — легаси, завязанное на эти механизмы, перестаёт работать без рефакторинга.
Ориентир: migration54 и подстраницы new-features / incompatible / deprecated.
Содержание
- Трейты
- Короткий массив
[] - Подсказка
callable $thisв замыканиях- Встроенный веб-сервер
- Прочий синтаксис
- Практические рецепты
- Обратная несовместимость
- Deprecated
- Прочее
Трейты
Трейт смешивает набор методов в класс без множественного наследования; конфликты разрешаются insteadof и as.
trait Timestampable
{
public function touch()
{
$this->updatedAt = new \DateTime();
}
}
class Post
{
use Timestampable;
}
Короткий массив []
$rows = [['id' => 1], ['id' => 2]];
Старый вызов array(...) остаётся валидным — стиль лучше зафиксировать в стандарте кодирования.
Подсказка callable
function registerHandler(callable $fn) {}
Принимает имя функции, [$obj, 'method'], замыкание и т.д. — правила как у is_callable().
$this в замыканиях
Замыкания, созданные внутри метода объекта, могут использовать $this — проще писать колбэки, привязанные к экземпляру.
Встроенный веб-сервер
php -S localhost:8080 -t public/
Только для dev/тестов: нет полноценного продакшен-стека из коробки.
Прочий синтаксис
Двоичные литералы 0b101010, немедленная индексация результата foo()[0], адаптация трейтов по мануалу.
Практические рецепты
Явно читайте $_GET/$_POST, если код жил за счёт register_globals. Уберите «лечение» stripslashes() под magic quotes — вход теперь без автоматического экранирования.
Обратная несовместимость
Главное (migration54 incompatible): сняты magic quotes и register_globals; удалён safe_mode; расширение mysql помечено deprecated (в PHP 7 его уберут); проверьте циклы с нестандартным break/continue. Уточните на своей сборке, как включён short_open_tag для шаблонов.
Deprecated
mysql_*, split() — см. migration54 deprecated.
Прочее
Перепроверьте сессии и сериализацию после обновления пакета.
Итог
PHP 5.4 выгодно брать вместе с чисткой безопасности: трейты и [] улучшают читаемость, а отказ от globals/magic quotes готовит код к 5.5–5.6 и дальше к PHP 7.