Ankündigung

Einklappen
Keine Ankündigung bisher.

Kindklasse: Methoden über _call() ergänzen?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Kindklasse: Methoden über _call() ergänzen?

    In einem CMS das ich verwende existiert eine Klasse, mit der sich verschiedene Daten eines Artikels abfragen lassen (getId(), getName() usw.). Ich habe diese Klasse um die Möglichkeit erweitert diese Daten zu verändern.
    Da jeder Wert über eine Methode geändert wird (setId(), setName() usw.) und es vorkommen kann, dass mehrere Daten nacheinander geändert werden möchte ich nicht jedesmal in die DB schreiben, sondern nur an kritischen Stellen. Abschließendes Speichern erfolgt dann mit "$article->saveChanges();".
    Ich habe dazu Eigenschaften und Methoden ergänzt die Änderungen vermerken ("_save()") und an genannten kritischen Stellen speichern ("_save_changes()"). Dazu zähle ich unter anderem sämtliche getXYZ()-Methoden. Da diese aber Teil der Oberklasse sind und ich _save_changes() am Anfang jeder dieser Methoden aufrufen müsste, folgende Fragen:

    Kann ich in einer Kindklasse _call() verwenden, um den Methoden der Oberklasse, die nicht in der Kindklasse überschrieben werden, weitere Anweisungen hinzuzufügen?
    Und entspricht parent:yz() einem statischen Aufruf oder bezieht sich $this in der Oberklasse dennoch auf die Kindklasse, in der der Aufruf erfolgt?


    Beispiel (vereinfacht):

    PHP-Code:
    function __call($method$args)
    {
      
    $this->_save_changes();
      return 
    parent::$method($args);

    Danke und Gruß
    Fabian


  • #2
    Das funktioniert nicht
    Zitat von http://uk2.php.net/manual/en/language.oop5.overloading.php
    __call() is triggered when invoking inaccessible methods in an object context.
    PHP-Code:
    <?php
    class Foo {
      public function 
    bar() {
        echo 
    'Foo:bar';
      }
    }

    class 
    Child extends Foo {
      public function 
    __call($name$arguments) {
        echo 
    "Child:__call($name)";
      }
    }

    $c = new Child;
    $c->bar();
    gibt aus: Foo:bar

    Kommentar


    • #3
      Mist. Danke.

      Kommentar

      Lädt...
      X