PHP Conference Japan 2024

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 魔术常量。

返回值

不返回任何值。

变更日志

版本 描述
PECL 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