Hi,
$name = (string)$xmlObject->xmlElement[0]['Name'];
Das stellt aber einen erheblichen Eingriff in die Kapselung dar. Da sind wir wieder bei der Unsinnigkeit von OOP unter PHP angelangt ;-P
Ich habe nicht nachgesehen, aber es ist nicht zwingend notwendig, dass der Rückgabewert von $xmlObject->xmlElement[0]
ein Array ist. Es reicht, wenn es das Array-Interface implementiert und somit die OffsetGet-Methode den Getter für "Name" ersetzt. Das wäre immer noch "gültiges OOP".
Beispiel (nicht getestet):
class MyBean implements ArrayAccess {
private $bla;
public getBla() { return $this->bla; }
public setBla($_bla) { $this->bla = $_bla; echo $_bla; }
private function getFuncName($key, $get = 1) {
$key = ($get ? 'g' : 's') . 'et' . ucfirst(strtolower($key));
}
public function offsetExists($key) {
return is_callable($this, $this->getFuncName($key));
//return method_exists($this, $key); // damit würden private Methoden aufrufbar werden
}
public function offsetGet($key) {
if (! $this->offsetExists($key))
throw new Exception('Member ' . $key . ' does not exist');
return $this->{$this->getFuncName($key)}();
}
public function offsetSet($key, $val) {
if (! $this->offsetExists($key))
throw new Exception('Member ' . $key . ' does not exist');
return $this->{$this->getFuncName($key, 0)}($val);
}
public function offsetUnset($key) {
if (! $this->offsetExists($key))
throw new Exception('Member ' . $key . ' does not exist');
return $this->{$this->getFuncName($key, 0)}(null);
}
}
$bean = new MyBean();
$bean['bla'] = 'blub';
// ruft $bean->setBla('blub') auf und führt darin das "echo" aus
Reflexion machts möglich. Kapselung ist im Wesentlichen nicht verletzt, da es nicht möglich ist, die Eigenschaft 'bla' zu setzen, ohne den Getter/Setter aufzurufen.
Aber ich vergaß, dass du mit deiner Aussage wieder nur versucht hast, deinen Standpunkt bzgl. OOP zu verteidigen.
Bis die Tage,
Matti