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";