PHP 5.3: Основные нововведения
PHP 5.3 — первая крупная модернизация ветки 5.x: пространства имён (namespace, use, полные имена), позднее статическое связывание (static:: вместо жёсткого self::), замыкания с use, ограниченный goto, NOWDOC (heredoc без подстановки переменных), сборщик мусора по желанию для циклических ссылок, архивы Phar и пачка улучшений расширений (mysqlnd, intl, обновления openssl). Параллельно язык ужесточается: передача аргумента по ссылке в месте вызова исчезает, часть привычек из PHP 4 помечена deprecated (ereg*), а новые зарезервированные слова могут сломать старые имена констант.
Ориентир — разделы migration53: новое, несовместимое, устаревшее.
Содержание
- Пространства имён
- Позднее статическое связывание
- Замыкания и
use goto, NOWDOC,constвне класса- Сборка мусора для циклов
- Phar, intl, драйверы
- Практические рецепты
- Обратная несовместимость
- Deprecated
- Прочие замечания
Пространства имён
Изолируют код и уменьшают длину префиксов классов: __NAMESPACE__, псевдонимы use, блочный синтаксис namespace — удобно вводить пакеты постепенно, не переписывая монолит за один раз.
Позднее статическое связывание
static:: разрешается в вызываемом классе при наследовании; self:: остаётся привязанным к классу, где метод объявлен. Это лечит типичные «статические хелперы», которые вели себя неправильно на PHP 5.2.
Замыкания и use
Анонимные функции захватывают переменные по значению или по ссылке через список use — основа для колбэков до появления $this в замыканиях в 5.4.
goto, NOWDOC, const вне класса
goto прыгает к метке в пределах функции — применяйте редко. NOWDOC не интерполирует $переменные — удобно для регулярок и shell. const на уровне файла поддерживается в именованных пространствах.
Сборка мусора для циклов
gc_enable / gc_disable / gc_collect_cycles помогают возвращать память при циклических ссылках между объектами — актуально для долгоживущих процессов и тяжёлых ORM-сценариев.
Phar, intl, драйверы
Пример объявления namespace и use:
namespace App\Model;
use App\Db\Connection;
class UserRepository
{
/** @var Connection */
private $db;
public function __construct(Connection $db)
{
$this->db = $db;
}
}
Phar упаковывает приложение в один архив. intl даёт форматирование через ICU. mysqlnd — нативный драйвер для mysql/mysqli/PDO_mysql при соответствующей сборке. Полный список — migration53 new-features.
Практические рецепты
Переводите ereg* на preg_* с разделителями. Вводите namespace по модулям: новые файлы с use, старые точки входа — последними.
Обратная несовместимость
Ключевое (migration53 incompatible): новые ключевые слова ломают незакавыченные «константы»; call-time pass-by-reference удалён; часть функций mysql помечена deprecated — готовьте mysqli/PDO; на Windows могли исчезнуть отдельные SAPI (например ISAPI) — переходите на поддерживаемые варианты.
Deprecated
ereg*, старый SQLite2, mime_magic в пользу fileinfo — см. migration53 deprecated.
Прочие замечания
Не опирайтесь на safe_mode как на модель безопасности. После обновления пакетов проверьте INI и список подключаемых расширений.
Итог
PHP 5.3 — старт современной раскладки кода: пространства имён и замыкания меняют архитектуру. Уберите ereg* и call-time references — тогда переходы на 5.4+ и далее к PHP 7 будут заметно проще.
<|tool▁calls▁begin|><|tool▁call▁begin|> StrReplace