terralo: Klassenvariablen dynamisch erzeugen

Wie kann ich Klassenvariablen dynamisch erzeugen?

$_VARS    = array();
$_VARS[0] = 'var1';
$_VARS[1] = 'var2';
$_VARS[2] = 'var3';

$obj = new klassenname;

for ($i = 0; $i < count($_VARS); $i++)
{
  $obj->$_VARS[$i] = $_VARS[$i];
}

das funktioniert so leider nicht. hat jemand eine idee, wie ich das lösen kann? vielen dank.

  1. Hi!

    Wie kann ich Klassenvariablen dynamisch erzeugen?

    Das widerspricht allerdings dem Sinn und Zweck von Objektorientierung.

    $_VARS    = array();
    $_VARS[0] = 'var1';
    $_VARS[1] = 'var2';
    $_VARS[2] = 'var3';

    $obj = new klassenname;

    for ($i = 0; $i < count($_VARS); $i++)
    {
      $obj->$_VARS[$i] = $_VARS[$i];
    }

    wenn Du einen Array übergeben willst würde ich das so machen:

    class Klassenname {
      var $deinarray;
      function setDeinArray($vars) {
        $this->deinarray = $vars;
      }
      function getDeinArray(){
        return $this->deinarray;
      }
    }

    $_VARS    = array();
    $_VARS[0] = 'var1';
    $_VARS[1] = 'var2';
    $_VARS[2] = 'var3';

    $obj = new Klassenname;
    $obj->setDeinArray($_VARS);
    var_dump($obj->getDeinArray());

    Man sollte von außen nicht direkt auf Klassenvariablen zugreifen, weil dies dem Prinzip der Kapselung widerspricht. Verwende Methoden als Schnittstellen um Daten der Klasse zu übergeben, oder um Daten auszulesen. Das hat den Vorteil dass der Aufruf dieser Funktionen (die Signatur) unverändert bleiben kann, während Du die Klasse intern komplett umbauen kannst. So wirken sich Änderungen in der Klasse nicht auf andere Teile Deiner Scripte aus.

    Ich würde Dir empfehlen mal die folgenden beiden Artikel zu lesen:
    http://phpmag.net/itr/online_artikel/psecom,id,284,nodeid,114.html
    http://www.sitepoint.com/article/object-oriented-php

    Viele Grüße
    Andreas

    --
    SELFHTML Linkverzeichnis: http://aktuell.de.selfhtml.org/links/