如何创建一个每次调用公共方法时调用的方法?你也可以说这是一个post-method-call-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
我希望每次调用另一个公共方法时调用baz()方法。 E.g。
Baz called
Foo called
Baz called
Bar called
我知道我可以做这样的事情:
public function foo() {
$this->baz();
echo "Foo called\n";
}
但这并不能真正解决我的问题,因为如果我有100个需要调用其他方法的方法,那么它实际上并不是正交的,实施起来相对比较痛苦在他们面前。
答案 0 :(得分:2)
可能不是你期望或想要的,但通过使用魔术方法__call
并标记那些受保护或私有的公共方法,你可以获得所需的效果:
<?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();