phpbar.de logo

Mailinglisten-Archive

[php] observer in php

[php] observer in php

Marco Weber marco.weber at uni-trier.de
Don Apr 17 12:13:36 CEST 2008


Hallo,

Ich möchte gerne wissen, welche Methoden von einem Objekt, wann
aufgerufen werden.

wie kann ich das in PHP am besten automatisieren?

Ansatz 1:

abstract class logger {
    public function __call($name, $args) {
      echo "$name called\n";
    }
}

class test extends logger {
  function func() {
    echo "hi\n";
  }
}

$test=new test();
$test->func();


Das geht ja nicht, da __call ja nur dann aufgerufen wird, wenn die
funktion nicht existiert.



Ansatz 2:
class logger {
    private $object;
    public function __construct(object $object) {
      $this->object=$object;
    }
    public function __call($name, $args) {
      echo "$name called\n";
      // dann etwas wie folgt...
      switch(count($args)) {
        0: return $this->$object->$name(); break;
        1: return $this->$object->$name($args[0]); break;
        2: return $this->$object->$name($args[0], $args[1]); break;
        3: return $this->$object->$name($args[0], $args[1], $args[2]);
break;
        4: return $this->$object->$name($args[0], $args[1], $args[2],
$args[3]); break;
        5: return $this->$object->$name($args[0], $args[1], $args[2],
$args[3], $args[4]); break;
        default: echo "FEHLER!!!\n";
      }
    }
}

class test {
  function func() {
    echo "hi\n";
  }
}

$test=new logger(new test());
$test->func();

Nachteil hier, zuerst mal das mit den params und wenn im code irgendwo 
"if($test instanceof test)" aufgerufen wird, gibts auch probleme.
Zudem müsste man hier auch den code überall umschreiben von new test()
zu new logger(new test())


Wie kann ich also eine einfach Automatisierung machen?



Grüsse
    Marco

php::bar PHP Wiki   -   Listenarchive