PHP 5.3: Основни нововъведения

PHP 5.3 е първата голяма модернизация в клона 5.x: пространства от имена, късно статично свързване (static::), затваряния с use, ограничен goto, NOWDOC, по избор събиране на циклични връзки, Phar и подобрения в разширенията (mysqlnd, intl, openssl). Езикът се стяга: изчезва предаване по референция в мястото на извикването, ereg* са deprecated, нови ключови думи могат да счупят стари имена на константи.

Изходна точка: migration53.

Съдържание


Пространства от имена

namespace App\Model;

use App\Db\Connection;

class UserRepository
{
    private $db;

    public function __construct(Connection $db)
    {
        $this->db = $db;
    }
}

Късно статично свързване

static:: се разрешава спрямо фактическия клас при наследяване; self:: остава към класа на декларацията.

Затваряния

Анонимни функции с use улавят променливи от обкръжението — основа за колбеци преди $this в затваряния (PHP 5.4).

goto, NOWDOC, const

NOWDOC не интерполира $променливи. const на ниво файл е поддържан в именовани пространства.

GC за цикли

gc_collect_cycles() и настройките gc_enable/gc_disable помагат при дълго живеещи процеси и ORM графи.

Phar, intl, драйвери

Phar пакетира приложение в един архив. intl дава ICU форматиране. Пълен списък: migration53 new-features.

Рецепти

Заменете ereg* с preg_*. Въвеждайте namespace на модули, не за един ден.

Обратна несъвместимост

migration53 incompatible: нови ключови думи, премахнато предаване по референция при извикване, deprecated части от mysql, промени в SAPI под Windows.

Deprecated

ereg*, стар SQLite2, mime_magicmigration53 deprecated.

Друго

Не разчитайте на safe_mode за сигурност. Прегледайте INI след ъпдейт на пакета.


Обобщение

PHP 5.3 отваря пътя към модерна структура на кода в 5.x. Премахнете ereg* и call-time references — след това преходите към 5.4+ и PHP 7 са по-гладки.