dr.Colossos: get_class_vars() Problem

Beitrag lesen

Hi,

danke fuer die Antwort.

Magische getter, aber vor allem magische setter sind mir garnicht recht.

Das haette ja zur folge, dass jedes der Felder in $_fieldnames von aussen per getter und setter bearbeitet werden kann - das sollte nicht unbedingt moeglich sein, es verleitet einem das dann zu oft zu benutzen, wodurch die Cross-Klassen-Zugriffe zunehmen, was fuer das Programm nie gut ist ... da wird man schnell denk faul :)

Reflection is mir ein zu maechtiges Instrument fuer etwas was die Sprache meines Erachtens ohnehin leisten sollte (sie Bemerkung unten).

Ich habs so gemacht, dass die Unterklassen eine Methode ...

class Unterklasse extends Oberklasse
{
 [...]
 // 3 extra Zeilen pro Unterklasse ... aergert mich immer noch, hehe
 protected function get_members()
 {
  return get_class_vars(get_class($this));
 }
 [...]
}
... bekommen, die dann in der Oberklasse aufgerufen wird.

class Oberklasse
{
 [...]
 protected function assign_members($data)
 {
  $members = $this->get_members();
  foreach($data as $field_name => $value)
  {
   if(array_key_exists($field_name, $members))
    $this->$field_name = $value;
  }
 }
 [...]
}

Komisch ist, dass mir in assign_members() der Aufruf von get_class_vars(get_class($this)); nicht die privaten/protected Members liefert.

Aber ich kann mit $this->$field_name = $value; diese Werte setzen! Eins der beiden ist dann wohl falsch. Beachtet, es ist eine Vererbungshierarchie, andernfalls ist der Zugriff auf private Members natuerlich zu verbieten, aber in dem Szenario wohl nicht ... Bug?

Hat jemand noch eine andere Idee?

Btw, PHP Version is 5.2.0 ... hilft ein Update ..?