International PHP Conference Berlin 2025

uopz_set_mock

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

uopz_set_mock新しいオブジェクトを生成する際に、クラスの代わりにモックを使う

説明

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

mock がクラス名を含んだ文字列だった場合、 class の代わりにそれがインスタンス化されます。 mock はオブジェクトであっても構いません。

注意:

プロパティやメソッドに動的にアクセスした場合にだけ、 mock オブジェクトを使います。 静的にアクセスした場合には、オリジナルの class を使います。 後に示す を参照ください。

パラメータ

class

モックで代替するクラスの名前

mock

モックとして使うクラス名を含む文字列。またはオブジェクト。 文字列を渡す場合、完全修飾されたクラス名でなければいけません。 この場合、マジック定数 ::class を使うことを推奨します。

戻り値

値を返しません。

変更履歴

バージョン 説明
PECL uopz 6.0.0 static なメンバは、この関数でサポートされなくなりました。 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() と static メンバ

uopz 6.0.0 以降、static なメンバはサポートされなくなりました。

<?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

Output of the above example in uopz 5:

mockA
mockA

参考

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top