(PECL uopz 5, PECL uopz 6)
uopz_set_mock — Использовать имитататор вместо класса для новых объектов
Если mock
- это строка, содержащая имя класса, тогда он
будет создан вместо class
. mock
также может быть объектом.
Замечание:
Только динамический доступ к свойствам и методам будет использовать объект
mock
. Статический доступ будет использовать оригинальныйclass
. Смотрите пример ниже.
class
Имя класса, который будет имитирован.
mock
Имитатор в виде строки, содержащей имя используемого класса, либо объект.
Если передана строка, она должна быть содержать абсолютное имя класса.
В этом случае рекомендуется использовать магическую константу ::class
.
Версия | Описание |
---|---|
uopz 6.0.0 | Имитирование статических функций более не поддерживаются этой функцией. Вместо это го следует использовать uopz_redefine() и uopz_set_return(), или Componere. |
Пример #1 Пример использования uopz_set_mock()
<?php
class A {
public function who() {
echo "A";
}
}
class mockA {
public function who() {
echo "mockA";
}
}
uopz_set_mock(A::class, mockA::class);
(new A)->who();
?>
Результат выполнения данного примера:
mockA
Пример #2 Пример использования uopz_set_mock()
<?php
class A {
public function who() {
echo "A";
}
}
uopz_set_mock(A::class, new class {
public function who() {
echo "mockA";
}
});
(new A)->who();
?>
Результат выполнения данного примера:
mockA
Пример #3 uopz_set_mock() и статические члены класса
Начиная с uopz 6.0.0, имитация статических членов класса не поддерживается.
<?php
class A {
public static function who() {
echo "A";
}
}
uopz_set_mock(A::class, new class {
const CON = 'mockA';
public static function who() {
echo "mockA";
}
});
echo A::CON, PHP_EOL;
A::who();
Результат выполнения данного примера:
A A
Вывод примера в uopz 5:
mockA mockA