在PHP中,有没有办法让类方法在当前的方法之前自动调用其他指定的方法? (我基本上是想从Ruby on Rails模拟before_filter。
例如,直接调用函数b但输出'hello you'。
function a()
{
echo 'hello';
}
function b()
{
echo 'you';
}
任何建议表示赞赏。
感谢。
答案 0 :(得分:2)
检查一下:
class Dispatcher {
/*
* somewhere in your framework you will determine the controller/action from path, right?
*/
protected function getControllerAndActionFromPath($path) {
/*
* path parsing logic ...
*/
if (class_exists($controllerClass)) {
$controller = new $controllerClass(/*...*/);
if (is_callable(array($controller, $actionMethod))) {
$this->beforeFilter($controller);
call_user_func(array($controller, $actionMethod));
/*..
* $this->afterFilter($controller);
* ...*/
}
}
}
protected function beforeFilter($controller) {
foreach ($controller->beforeFilter as $filter) {
if (is_callable(array($controller, $filter))) {
call_user_func(array($controller, $filter));
}
}
}
/*...*/
}
class FilterTestController extends Controller {
protected $beforeFilter = array('a');
function a() {
echo 'hello';
}
function b() {
echo 'you';
}
}
答案 1 :(得分:0)
PHP不支持过滤器。但是,您可以只修改自己的函数以确保a()始终在b()之前运行。
function a()
{
echo 'hello';
}
function b()
{
a();
echo 'you';
}
答案 2 :(得分:0)
如果您不愿意覆盖b()来同时调用它们,则不会。
你可能对AOP for PHP感兴趣。
答案 3 :(得分:0)
这个怎么样:
function a()
{
echo 'hello';
}
function b()
{
a();
echo 'you';
}
如果你在一个班级,并且这两个职能都属于那个班级:
function a()
{
echo 'hello';
}
function b()
{
$this->a();
echo 'you';
}
不确定,但可能这就是你要找的东西。感谢