dedlfix: get_class_vars() Problem

Beitrag lesen

echo $begrüßung;

Nehmen wir mal die Tabelle Personen an, aus deren Eintraegen ich Objekte erstellen moechte.
Ich faend es recht fein, wenn ich die Member-Variablen (z.B. Name, Vorname, etc). nicht explizit initialisieren muesste ...

Dann hätte ich einen Vorschlag, der ohne viel Aufwand daherkommt. Ich hoffe, er ist zusammen mit den Kommentaren selbsterklärend.

class DbRecord {  
  // Feldnamen aus der Datenbank, wird durch spezialisierte Klasse überschrieben  
  protected $_fieldnames = array();  
  // Ablage für Datenbankwerte  
  protected $_values = array();  
  
  // magische Methode für den Zugriff auf die Datenbank-Felder  
  function __get($key) {  
    // wenn in _fieldnames aufgeführt und in den Datenbankwerten enthalten  
    if (in_array($key, $this->_fieldnames) and isset($this->_values[$key]))  
      return $this->_values[$key];  
    else  
      throw new Exception("Key $key doesn't exists");  
  }  
  
  function __set($key, $value) {  
    ...  
  }  
}  
  
class Person extends DbRecord {  
  protected $_fieldnames = array('foo', 'baz');  
  
  function __construct($db_data) {  
    $this->_values = $db_data;  
  }  
}  
  
// Funktionstest  
echo "<pre>\n";  
$p = new Person(array('foo' => 'bar', 'baz' => 'qux'));  
print_r($p);  
var_dump($p->foo);

Problem ist nun, dass mir get_class_vars(get_class($this)); keine private Members liefert, obwohl der AUFRUF der Methode assign_members() in der abzufragenden Klasse (Person) ist.

Ja, das scheint an PHPs Implementation von OOP zu liegen. assign_members() wird in der Umgebung der AssignmentClass aufgerufen und von der aus kann es auf die privaten Mitglieder nicht zugreifen. Mit Reflection sollte das aber funktionieren.

echo "$verabschiedung $name";