4

パブリック メソッドが呼び出されるたびに呼び出されるメソッドを作成するにはどうすればよいですか? これはポストメソッドコールフックとも言えます。

私の現在のコード:

<?php
class Name {
   public function foo() {
      echo "Foo called\n";
   }

   public function bar() {
      echo "Bar called\n";
   }

   protected function baz() {
      echo "Baz called\n";
   }
}

$name = new Name();
$name->foo();
$name->bar();

このコードの現在の出力は次のようになります。

Foo called
Bar called

別の public メソッドが呼び出されるたびに baz() メソッドが呼び出されるようにしたいと思います。例えば

Baz called
Foo called
Baz called
Bar called

私は次のようなことができたことを知っています:

public function foo() {
    $this->baz();
    echo "Foo called\n";
}

しかし、それは私の問題を実際には解決しません。なぜなら、それは実際には直交的ではなく、この他のメソッドをそれらの前に呼び出す必要がある100個のメソッドがある場合、実装するのは比較的面倒だからです。

4

1 に答える 1

2

あなたが期待したり望んでいたものではないかもしれませんが、魔法のメソッドを使用し、__callそれらの public メソッドを protected または private にマークすることで、望ましい効果を得ることができます:

<?php
class Name {
    public function __call($method, $params) {
        if(!in_array($method, array('foo', 'bar')))
            return;
        $this->baz();
        return call_user_func_array(
                    array($this, $method), $params);
    }

   protected function foo() {
      echo "Foo called\n";
   }

   protected function bar() {
      echo "Bar called\n";
   }

   protected function baz() {
      echo "Baz called\n";
   }
}

$name = new Name();
$name->foo();
$name->bar();
于 2012-07-07T04:37:04.753 に答える