PHP before action and after action

2019-09-06 09:59发布

问题:

I would like to know how can I do something similar with beforeAction() and afterAction() from Yii.

I need to have the same behavior in my PHP like those two functions from Yii and I don't know where to start from.

What I really need in my case is that every time a function executes, it has to reload some parameters and after the function executes it's code, it has to set them again.

The first action can be done in the constructor but the second one can only be done using a callback and this is not quite lovely.

I also need to implement this because the number of functions is about 30 and each one is doing something similar. Using this kind of behaviors I'll reduce the code size with about 70%.

function a1(){
  load();
  procA1();
  set();
}

function a2(){
  load();
  procA2();
  set();
}

function a3(){
  load();
  procA3();
  set();
}
and so on...

回答1:

Updated: Use call_user_func($function_name, (optional) $parametrs) + magic __call method. It is exactly the same as in Yii.

public function __call($name,$args) {
   if (method_exists($this,$name)) {
      $this->beforeAction();
      $ret =  call_user_func_array(array($this, $name), $args);
      $this->afterAction();
      return $ret;
   }
}

Now you can simple call $object->a3(). You can have function named a3 in the class, but add private modifier to it.



标签: php yii action