Mailinglisten-Archive |
Hi, On Saturday 22 May 2004 19:50, Martin Abraham wrote: > Hab folgendes Beispiel und möcht gerne wissen, wieso ich vor > > Z35: > $this->objId->strFgstNr = $strFgstNr; Wäre schön gewesen dieuach zu markieren ;-) > kein: > $this->objId = new FzgIdKlasse(); > > einfügen muss. > > > Code: > > <? [...] > class AutoKlasse extends Fahrzeugklasse{ > > var $strMarke, $strTyp; > > function AutoKlasse($strMarke, > $strTyp,$nBaujahr,$strFgstNr,$strHerstNr){ > $this->strMarke = $strMarke; > $this->strTyp = $strTyp; > $this->nBaujahr = $nBaujahr; > $this->nBaujahr = $nBaujahr; > $this->objId->strFgstNr = $strFgstNr; > $this->objId->strHerstNr = $strHerstNr; > } Hier wird $this->objId kein Objekt von FzgIdKlasse sondern von stdClass. Richtigerweise sollte aber, wie Du schon vermutet hast, zunächst ein FzgIdKlasse-Objekt zugewiesen werden. stdClass ist das einfachst-mögliche Objekt ohne Methoden oder Properties: <?php var_dump(new stdClass()); ?> object(stdClass)(0) { } (Mit Hilfe der Reflection-API von PHP5 kann man auch sehen, dass es keine Methoden hat - siehe http://schlueters.de:8000/phpstuff/php5/reflection.php -> stdClass und Doku) stdClass ist dabei die Klasse, die genutzt wird, wenn man mit dem -> Operator auf eine Variable zugreift, die bisher noch kein Objekt war. <?php $a = NULL; echo "\$a = NULL:\n"; var_dump($a); $a->foo = 'bar'; echo "\n\$a->foo = 'bar':\n"; var_dump($a); ?> Führt zu $a = NULL: NULL $a->foo = 'bar': object(stdClass)(1) { ["foo"]=> string(3) "bar" } Ich hoffe das irgendwie verständlich gemacht zu haben ;-) (gilt übrigens alles für PHP4 und PHP5) > function __clone(){ > FahrzeugKlasse::__clone(); > } Als Antwort auf Deine andere Mail: Nötig ist es nicht: <?php class A { function __clone() { echo "Cloning"; } } class B extends A {} $foo = new B(); $bar = clone $foo; ?> Gibt "Cloning" aus. Wenn man aber die __clone() nochmal überschreibt hat man die Erinnerung, dass man einen eigenen Clone-Handler für die Klasse hat was insbesondere dann interessant ist, wenn man jetzt beim klonen der abgeleiteten Klasse (AutoKlasse bzw. in meinem Beispiel oben B) auch einen Clone-Handler braucht und nicht vergessen will den eigentlichen (von FahrzeugKlasse bzw. bei mir A) Handler aufzurufen. Was ich aber etwas schöner (und "sauberer") finde ist "parent" statt des Klassennamens zu nutzen, also <?php function __clone() { parent::__clone(); } ?> johannes
php::bar PHP Wiki - Listenarchive