dr.Colossos: get_class_vars() Problem

Beitrag lesen

Hi,

ich moechte Objekte ohne viel Code aus Datenbank-Tabellen erstellen.

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 ...

[...]
$this->name = $db->value['name']
$this->vorname = $db->value['vorname']
[...]

... sondern dass ueber eine Schleife machen koennte.

Da ich das nicht nur bei einer Klasse machen will, sondern bei mehreren, bietet es sich an die Methode die das macht in eine Oberklasse zu schieben, und im Konstruktor der Unterklasse aufzurufen.

Sieht in etwa so aus:
Unterklasse ruft assign_members($db_data) auf, welche in Oberklasse definiert ist
$db_data ist ein assoziatives Array der Form $db_data['name'] = 'Dr.Colossos'
Die Werte mit den keys des Arrays die mit Members uebereinstimmen, werden gesetzt ... unten steht der Code.

class Person extends AssignmentClass
{
 protected function assign_members($db_data)
 {
  $members = get_class_vars(get_class($this));
  foreach($db_data as $field_name => $value)
  {
   if(array_key_exists($field_name, $members))
    $this->$field_name = $value;
   // TODO: throw Exception here ...
   else
    echo '<h1>ERROR! member "'.$field_name.'" is not definded!</h1>';
  }
 }
}

class Person extends AssignmentClass
{
 private $name = null;
 private $vorname = null;
 [...]
 public function __construct($db_data)
 {
  $this->assign_members($db_$data);
 }
 [...]
}

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.

Wie ist das mit der Vererbung in PHP? Kann man diese Problem (sauber)  umgehen?

ich denke das Problem ist, dass assign_members() eine Methode der Oberklasse ist ... sollte zwar runter-vererbt werden, aber is wohl nicht so.

Wenn ich die Methode assign_members() in die Klasse Person kopiere funktionierts einwandfrei. Aber wenn ich viele derartige Klassen habe, dann waer's unsinnig in jeder dieser eine Methode assign_members() zu haben.

Hat da jemand eine Idee?

Mein work-around waere ein getter in der Unterklasse der get_class_vars(get_class($this)); zurueckliefert, und assign_members() der Oberklasse auf den Daten arbeiten laesst ... gefaellt mir aber nicht so wirklich.

Danke fuer eure Hilfe!