0

他のいくつかのパブリックメソッドの前に1つのプライベートメソッドを実行する必要があるため、__callデフォルトのメソッド呼び出しをオーバーライドするように見えるメソッドを使用したため、次のようになります

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

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

    call_user_func($method, $arguments);
}

__callしかし、メソッドが未定義のメソッドでのみ機能することに突然気づいたので、指定する前にカスタムメソッドを呼び出す方法はありますか?

4

1 に答える 1

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 の本体が呼び出されます。

編集

どのメソッドを呼び出すかを指定したかったのです。

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
于 2013-06-07T11:44:58.910 に答える