uopz_set_mock

(PECL uopz 5, PECL uopz 6, PECL uopz 7)

uopz_set_mock使用模拟类代替类来创建新对象

描述

uopz_set_mock(string $class, mixed $mock): void

如果 mock 是一个包含类名的字符串,则将实例化该类,而不是实例化 classmock 也可以是一个对象。

注意:

只有对属性和方法的动态访问会使用 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

参见

添加注释

用户贡献的注释

此页面没有用户贡献的注释。
To Top