phpbar.de logo

Mailinglisten-Archive

[php] PDOStatement::execute überladen

[php] PDOStatement::execute überladen

Yannik Hampe yannikh at gmail.com
Mit Okt 25 19:53:02 CEST 2006



Lutz Zetzsche wrote:
> Hi Yannik,
> 
> Am Mittwoch, 25. Oktober 2006 18:28 schrieb Yannik Hampe:
>> ich beschäftige mich gerade etwas mit PDO.
>> Ich wollte die execute-Funktion von PDOStatement nun etwas erweitern
>> und habe versucht einfach eine Klasse von PDOStatement abzuleiten,
>> die dann execute überläd.
>> Nur leider gibt PDO::prepare immer ein PDOStatement zurück und nicht
>> meine abgeleitete Klasse. Gibt es eine Möglichkeit, wie ich execute
>> trotzdem überladen kann?
> 
> vorweg möchte ich sagen, daß ich das Überladen in PHP5 noch nicht selbst 
> verwendet habe. Alles was ich darüber hinsichtlich PHP weiß, habe ich 
> mir im Handbuch angelesen.
> 
> Ich vermute, daß das, was Du möchtest, nicht geht. Im Online-Handbuch 
> steht:
> 
> "Both method calls and member accesses can be overloaded via the __call, 
> __get and __set methods. These methods will only be triggered when your 
> object or inherited object doesn't contain the member or method you're 
> trying to access."
> (Quelle: http://www.php.net/manual/en/language.oop5.overloading.php)

Das meine ich nicht...
> 
> Da PDOStatement::execute schon existiert, ist im PHP-Sinne ein Überladen 
> mit __call also nicht möglich.
> 
> Oder meinst Du Überladen so, wie es in Java gemeint ist? Oder meinst Du 
> gar Überschreiben, wie es auch in Java verwendet wird?

Ja, genau... Überladen wie in Java... Nur kurz, damit ich jetzt nicht
gerade Überladen und Überschreiben durcheinander bekomme: Ich will schon
noch in der Lage seine mit parent::altefunktion() die alte Funktion
aufzurufen.
> 
> Vielleicht kannst Du mal den Code zeigen, sowohl die Erweiterung als 
> auch den Aufruf. :-)
Klar doch. Simples Beispiel:
class yPDOStatement extends PDOStatement
{
  public function execute($ar)
  {
    //Hier Zeugs machen (logging, debugging, pre-processing und sowas)
    parent::execute($ar); //dann die alte execute-Funktion aufrufen.
  }
}
Das würde schon alles machen, was ich will, nur dass PDO::prepare mir
ein PDOStatement und kein yPDOStatement zurückgibt.
> 
> 
> Viele Grüße
> Lutz

Yannik

php::bar PHP Wiki   -   Listenarchive