如何在别人之前运行方法?

时间:2013-06-07 11:40:34

标签: php

我需要在其他公共方法之前运行一个私有方法,所以我使用了__call方法,它似乎覆盖默认方法调用,所以它看起来像这样

function __call($method, $arguments)
{
    // echo($method);

    if (in_array($method, array('changeStatus', 'lockStatus'))) 
        $this->_checkInputData($arguments);

    call_user_func($method, $arguments);
}

但我突然发现__call方法仅适用于非定义方法,所以有没有办法在指定之前调用自定义方法?

1 个答案:

答案 0 :(得分:0)

这个问题有点奇怪。要在公开之前调用私有方法,您可以在公共方法示例中调用它

class Example
{
   private function methodA()
   {
     echo 'I am a method A';
   }

   public function methodB()
   {
     $this->methodA();
     echo 'I am a method B';
   }
}

以这种方式在对象上调用methodB时,它首先调用methodA,然后调用方法B的body。

修改

你想指定应该调用哪种方法。

class Example
{
   private function methodA()
   {
     echo 'I am a method A';
   }

   private function methodB()
   {
     echo 'I am a method B';
   }

   public function callMethods($method)
   {
      if($method =='a') $this->methodA();
      else if($method =='b') $this->methodA();
      //rest of function  
   }
}

通过这种方式,您可以在

中指定
$obj = new Example();
$obj->callMethods('a'); // will call firstly MethodA
$obj->callMethods('b'); // will call firstly MethodB