(PECL uopz 5, PECL uopz 6, PECL uopz 7)
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 {
const CON = '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