PHP 5.3: Головні нововведення

PHP 5.3 закладає основу «сучасного» PHP у гілці 5.x: простори імен, пізнє статичне зв’язування (static::), замикання з use, обмежений goto, NOWDOC, збирання сміття для циклічних посилань за потреби, Phar і оновлення розширень (mysqlnd, intl). Мова суворішає: зникає call-time pass-by-reference, ereg* позначені як застарілі, нові зарезервовані слова можуть зламати старі імена констант.

Офіційний розклад: migration53.

Зміст


Простори імен

namespace App\Model;

use App\Db\Connection;

class UserRepository
{
    private $db;

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

Пізнє статичне зв’язування

static:: відноситься до фактичного класу під час виклику в ланцюгу успадкування; self:: — до класу, де метод оголошено.

Замикання

Анонімні функції з use захоплюють змінні з оточення — основа колбеків до PHP 5.4 з $this.

goto, NOWDOC, const

NOWDOC не підставляє $змінні. const на рівні файлу в просторі імен підтримується.

GC для циклів

gc_collect_cycles() тощо допомагає при довгоживучих процесах і складних графах об’єктів.

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.