__get (); __set (); | deklaration/definition/initialisierung
am 31.07.2006 16:55:26 von Helmuth Gronewold
Hallo!
Ich schreibe zur Zeit eine Klasse in PHP 5 und interessiere mich für die
Methoden __get (); und __set();.
Neben mir liegt das Buch "Umsteigen auf PHP 5" in dem diese Methoden
behandelt werden.
Allerdings ist mir die Erklärung /wann/ diese Methoden aufgerufen werden
nicht ganz klar.
Geschrieben steht, dass sie aufgerufen werden, wenn ein Attribut noch
nicht /definiert/ ist. Was genau meint der Autor?
Ist definition == deklaration?
Oder definition == initialisierun?
Oder definition == deklaration && initialisierung?
Zur Erklärung hier die Metoden, wie sie im Buch geschrieben stehen:
---------------snip---------------
class Something {
private $daten;
public function __get ($eigenschaft) {
if (isset ($this->daten[$eigenschaft]))
return $this->daten[$eigenschaft];
else
return FALSE;
}
public function __set ($eigenschaft, $wert) {
$this->daten[$eigenschaft] = $wert;
}
}
---------------snap---------------
Gilt das sobald das Attribut auftaucht?
Also sobald ich mein Array vorher deklariere?
$daten['name'];
$daten['vorname'];
Oder werden die Methoden nicht aufgerufen sobald ich ein Attribut direkt
in der Klasse deklariere?
class MyClass {
private name;
private vorname;
}
Danke!
Gruß,
Helmuth
Re: __get (); __set (); | deklaration/definition/initialisierung
am 31.07.2006 16:59:53 von Frank Schenk
> Oder werden die Methoden nicht aufgerufen sobald ich ein Attribut direkt
> in der Klasse deklariere?
>
> class MyClass {
> private name;
> private vorname;
> }
So, steht aber auch im offiziellen Handbuch unter www.php.net
>
> Danke!
Bitte
Frank
Re: __get (); __set (); | deklaration/definition/initialisierung
am 31.07.2006 20:01:26 von Ulf Kadner
Helmuth Gronewold wrote:
> Ich schreibe zur Zeit eine Klasse in PHP 5 und interessiere mich für die
> Methoden __get (); und __set();.
Das taten wohl schon andere, weshalbst wohl auch im Manual beschrieben
steht. :-)
> Geschrieben steht, dass sie aufgerufen werden, wenn ein Attribut noch
> nicht /definiert/ ist. Was genau meint der Autor?
Das die Methoden aufgerufen wird wenn auf ein Undefiniertes Atrribut
lesend __get oder schreibend __set zugriffen werden soll.
> Ist definition == deklaration?
> Oder definition == initialisierun?
> Oder definition == deklaration && initialisierung?
Was willst Du damit Fragen?
> ---------------snip---------------
> class Something {
> private $daten;
> public function __get ($eigenschaft) {
> if (isset ($this->daten[$eigenschaft]))
> return $this->daten[$eigenschaft];
> else
> return FALSE;
> }
> public function __set ($eigenschaft, $wert) {
> $this->daten[$eigenschaft] = $wert;
> }
> }
Knnste ja mal fix umstriken damit Du evtl siehst was gemeint ist. Der
obige Code sollte bereits alles sagen:
class A
{
private $daten = array();
public function __get($propname) {
if (isset($this->daten[$propname]))
return $this->daten[$propname];
else
throw new Exception("Property '{$propname}' dont exists!");
}
public function __set($propname, $wert) {
$this->daten[$propname] = $wert;
}
}
$a = new A();
$a->X = 20;
echo $a->X;
echo $a->Y; // Exception da nicht definiert im internen Array $daten
> Also sobald ich mein Array vorher deklariere?
>
> $daten['name'];
> $daten['vorname'];
Nee Du greifst doch ueber $this->daten auf das Array zu, was im Objekt
bereits enthalten ist.
> Oder werden die Methoden nicht aufgerufen sobald ich ein Attribut direkt
> in der Klasse deklariere?
So ist es.
MfG, Ulf