array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'ja', ), 'this' => array ( 0 => 'function.uopz-set-mock.php', 1 => 'uopz_set_mock', ), 'up' => array ( 0 => 'ref.uopz.php', 1 => 'Uopz 関数', ), 'prev' => array ( 0 => 'function.uopz-set-hook.php', 1 => 'uopz_set_hook', ), 'next' => array ( 0 => 'function.uopz-set-property.php', 1 => 'uopz_set_property', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'ja', 'path' => 'reference/uopz/functions/uopz-set-mock.xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
(PECL uopz 5, PECL uopz 6, PECL uopz 7)
uopz_set_mock — 新しいオブジェクトを生成する際に、クラスの代わりにモックを使う
mock
がクラス名を含んだ文字列だった場合、
class
の代わりにそれがインスタンス化されます。
mock
はオブジェクトであっても構いません。
注意:
プロパティやメソッドに動的にアクセスした場合にだけ、
mock
オブジェクトを使います。 静的にアクセスした場合には、オリジナルのclass
を使います。 後に示す 例 を参照ください。
class
モックで代替するクラスの名前
mock
モックとして使うクラス名を含む文字列。またはオブジェクト。
文字列を渡す場合、完全修飾されたクラス名でなければいけません。
この場合、マジック定数 ::class
を使うことを推奨します。
値を返しません。
バージョン | 説明 |
---|---|
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