PHP 5.3: Головні нововведення
PHP 5.3 закладає основу «сучасного» PHP у гілці 5.x: простори імен, пізнє статичне зв’язування (static::), замикання з use, обмежений goto, NOWDOC, збирання сміття для циклічних посилань за потреби, Phar і оновлення розширень (mysqlnd, intl). Мова суворішає: зникає call-time pass-by-reference, ereg* позначені як застарілі, нові зарезервовані слова можуть зламати старі імена констант.
Офіційний розклад: migration53.
Зміст
- Простори імен
- Пізнє статичне зв’язування
- Замикання
goto, NOWDOC,const- GC для циклів
- Phar, intl, драйвери
- Рецепти
- Зворотна несумісність
- Deprecated
- Інше
Простори імен
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_magic — migration53 deprecated.
Інше
Не покладайтеся на safe_mode. Перевірте INI після оновлення пакета.
Підсумок
PHP 5.3 — початок модульної архітектури в екосистемі 5.x. Приберіть ereg* і call-time references — далі легше рухатися до 5.4+ і PHP 7.