设计问题/ PHP: 我有一个方法课。 当调用类中的任何方法时,我想随时调用外部函数。 我想把它变成通用的,所以每当我添加另一个方法时,流程也会使用这个方法。
简化示例:
<?php
function foo()
{
return true;
}
class ABC {
public function a()
{
echo 'a';
}
public function b()
{
echo 'b';
}
}
?>
我需要在调用a()或b()之前调用foo()。
我怎样才能做到这一点?
答案 0 :(得分:7)
保护您的方法,使其无法从课堂外直接访问,然后使用魔术__call()方法来控制对它们的访问,并在调用您的foo()后执行它们
function foo()
{
echo 'In pre-execute hook', PHP_EOL;
return true;
}
class ABC {
private function a()
{
echo 'a', PHP_EOL;
}
private function b($myarg)
{
echo $myarg, ' b', PHP_EOL;
}
public function __call($method, $args) {
if(!method_exists($this, $method)) {
throw new Exception("Method doesn't exist");
}
call_user_func('foo');
call_user_func_array([$this, $method], $args);
}
}
$test = new ABC();
$test->a();
$test->b('Hello');
$test->c();
答案 1 :(得分:1)
您需要使用班级的__invoke()
方法
class ABC {
public function __invoke()
{
//Call your external function here
}
public function a()
{
echo 'a';
}
public function b()
{
echo 'b';
}
}
供参考:http://php.net/manual/en/language.oop5.magic.php#object.invoke