Matti Mäkitalo: Syntaxfrage

Beitrag lesen

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