gpt4 book ai didi

php - 如何创建一个每次调用公共(public)方法时都会调用的方法?

转载 作者:可可西里 更新时间:2023-10-31 23:33:16 24 4
gpt4 key购买 nike

如何创建一个每次调用公共(public)方法时都会调用的方法?您也可以说这是一个后方法调用 Hook 。

我当前的代码:

<?php
class Name {
public function foo() {
echo "Foo called\n";
}

public function bar() {
echo "Bar called\n";
}

protected function baz() {
echo "Baz called\n";
}
}

$name = new Name();
$name->foo();
$name->bar();

这段代码的当前输出是:

Foo called
Bar called

我希望每次调用另一个公共(public)方法时都调用 baz() 方法。例如

Baz called
Foo called
Baz called
Bar called

我知道我可以做这样的事情:

public function foo() {
$this->baz();
echo "Foo called\n";
}

但这并不能真正解决我的问题,因为这不是真正的正交,如果我有 100 个方法需要在它们之前调用另一个方法,那么实现起来会比较痛苦。

最佳答案

可能不是您所期望或想要的,但通过使用魔术方法 __call 并将这些公共(public)方法标记为 protected 或私有(private),您可以获得预期的效果:

<?php
class Name {
public function __call($method, $params) {
if(!in_array($method, array('foo', 'bar')))
return;
$this->baz();
return call_user_func_array(
array($this, $method), $params);
}

protected function foo() {
echo "Foo called\n";
}

protected function bar() {
echo "Bar called\n";
}

protected function baz() {
echo "Baz called\n";
}
}

$name = new Name();
$name->foo();
$name->bar();

关于php - 如何创建一个每次调用公共(public)方法时都会调用的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11372277/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com