php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2008

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 29.12.2008, 17:31  
Neuer Benutzer
 
Registriert seit: 02.12.2008
Beiträge: 16
ciss befindet sich auf einem aufstrebenden Ast
Standard 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::xyz() 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

Geändert von ciss (29.12.2008 um 17:34 Uhr).
ciss ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 29.12.2008, 17:57  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

Das funktioniert nicht
Zitat:
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
David ist offline  
Alt 29.12.2008, 18:08  
Neuer Benutzer
 
Registriert seit: 02.12.2008
Beiträge: 16
ciss befindet sich auf einem aufstrebenden Ast
Standard

Mist. Danke.
ciss ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php _call, php __call kindklasse, php kindklasse aufrufen, php funktion einer klasse ergänzen, php __call parent, _call php, php methode einer kindklasse aufrufen, oberklasse methode der kindklasse, php methode von kindklasse aufrufen, php mehrere methoden hintereinander aufrufen, \_call\ \__call\ funktion php, annotation php, php class kindklasse, in kindklasse methode verändern php, kindesklasse aufrufe, aufruf der kindklasse, methoden von der vaterklasse in der kindklasse benutzen, php __call arguments, kindklasse oberklasse c, php klassen methoden kindklasse

Alle Zeitangaben in WEZ +2. Es ist jetzt 18:19 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum