dedlfix: assoziative Werte mit __set() und Index in numerisches array einfügen?

Beitrag lesen

Tach!

Ok. Meine Intension ist,

Intention mit t. Intens... wäre ein Fall für intensiv.

Sry, checke ich nich

Intention schreibt sich mit t, nicht mit s. Du kannst aber auch "Absicht" nehmen.

Nun ist es nur noch ein einfacher Getter/Setter als Kapselung des Zugriffs auf private Eigenschaften, und ohne Array. Was möchtest du wirklich?

ich möchte dieses Konstrukt eben gerade verhindern.

Warum führst du es dann als Beispiel dafür an, was du möchtest? Weniger Verwirrung und ständige Änderungen des Ziels würde die Sache einfacher machen.

Wenn noch 13 solcher Eingeschaften hinzukommen, schreibst du 15 mal dasselbe nur mit anderem Variablennamen?

checke ich net sry.

Deine Lösung ist sehr wiederholend. Mir ist dabei auf den ersten Blick auch nicht aufgefallen, dass die Typprüfungen unterschiedlich sind. Wenn du an einer solchen Lösung feststelst, dass da was grundlegend anders gemacht werden muss, dann musst du diese Änderung an vielen Stellen vornehmen anstatt nur an einer. Deswegen Wiederholungen meiden.

Das Problem an __get/__set ist auch noch, dass es nur dieses eine Funktionspaar ist, das sich um die Zugriffe kümmert, und man alles darin abwickeln muss, auch wenn es für die einzelnen Eigenschaften individuell ist. Um die Komplexität gering zu halten, sind viele Programmierer bestrebt, das Single-Responsibility-Prinzip einzuhalten.

Prüf den Namen gegen eine einfach erweiterbare Liste, beispielsweise mit in_array(). Die Prüfung von $value und das Zuweisen geht dann als einmal geschriebener Code.

kannst du bitte n kleines Klassen Code beispiel geben, damit ich das besser begreife.

Aus dem Kopf geschrieben, kann Fehler enthalten:

function __set($name, $value) {
  $stringProperties = ['foo', 'bar'];
  $arrayProperties = ['qux', 'baz'];

  if (in_array($name, $stringProperties) and is_string($value)) {
    $this->$name = $value;
  } else if (in_array($name, $arrayProperties) and is_array($value)) {
    $this->$name = $value;
  } else {
    // Fehlerbehandlung
  }
}

Wenn nun String und/oder Array-Eigenschaften hinzukommen, dann muss nur noch deren Name ins jeweilige Array eingetragen werden. Zudem weisen nun die Namen $stringProperties und $arrayProperties deutlich darauf hin, was für ein Typ beabsichtigt ist.

dedlfix.