Создания экземпляра объекта без вызова его конструктора в PHP

  • 1,367
  • 1
  • 0
  • 0
  • 1 год назад

Сегодня я наткнулся на статью в местной группе разработчиков PHP. Речь шла о создании экземпляра объекта без вызова его конструктора (как указано в заголовоке поста).

Во-первых эта идея не имеет смысла для меня. Потому что конструктор вызывается каждый раз когда создаётся объект, но если не нужен вызов конструктора, то просто можно его не объявлять метод __construct. Из любопытства, я начал читать статью. Как выяснилось, это действительно полезно для тестирования mock объектов. Наиболее интересный метод был найден в исходинках PHPUnut и выглядит он так:

$object = unserialize(
    sprintf('O:%d:"%s":0:{}', strlen($className), $className)
);

Начиная с PHP 5.4, в ReflectionClass для этих целей появился встроенный метод:

$reflection = new ReflectionClass($className);
$object = $reflection->newInstanceWithoutConstructor();

Комментарии

0