Variable zur Laufzeit in Klasse erstellen

Echt herrlich was Felix_Jacobi da gecoded hat!

Mir bleibt aber noch eine Frage offen, die mir echt den Kopf zerbricht.
Warum sollen während der Laufzeit Variablen erstellt werden? Vielleicht habe ich grade einfach nur eine Denkblockade. Aber wenn ich mir eine Klasse baue, dann ist diese in sich schlüssig und benötigt nicht unbedingt Variablen die während der Laufzeit hinzukommen. Gibt es konkrete Beispiele wo ich sowas einsetzen kann?
 
PHP:
<?php
class Foo 
{
  public function setVar() # Vars werden im Format Varname - Varinhalt übergeben
  {
    $args = func_get_args();
    for($i = 0; $i < func_num_args(); $i++) {
      $this->{$args[$i]} = $args[$i+1];
      $i++;
    }
  }
  public function setVarArray($array)
  {
	foreach($array as $key => $value) {
		$this->{$key} = $value;
	}
  }
  public function getVar($identifier)
  {
    return $this->{$identifier};
  }
  
}

$test = new Foo;

$arr = array('foo' => 'bar', 'bar' => 'foo');

$test->setvarArray($arr);

echo $test->getVar('foo');
?>
So könnte eine Funktion für ein Array übrigens aussehen.

Und naja, ab und zu braucht man solche Dinge, z. B. wenn man mit mehreren Klassen zusammenarbeitet.

Nehmen wir an in einem Browserspiel geht es um eine Berechnung die von mehreren Dingen abhängt.
Optimalerweise gibt es nun für den Spieler eine Klasse (Player) und die Welt (World).

Nun möchte der Spieler einen Angriff durchführen, gegen einen anderen, also wird z. B. $Player->attack(var) aufgerufen.
Allerdings gibt es verschiedene Terrains die verschiedene Bonis liefern.
Also fragt man $World->getLandBonus() ab und holt sich die aktueleln Bonis und übergibt diese an $Player->attack() damit dort die richtige Berechnung durchgeführt wird.

Oder eben statt sie zu übergeben, erstellt man einfach durch $Player->setVar() die Variable.
 
Verstehe ich euch irgendwie falsch?

Hier mal mein Lösungsansatz:
PHP:
class Bar {

    protected $vars = array();

    public function __set($name, $value) {
    
        $this->vars[$name] = $value;

    }

    public function __get($name) {
    
        if (!empty($name) && array_key_exists($name, $this->vars))
            return $this->vars[$name];
        return null;

    }

}

// Benutzung:
$bar = new Bar();
$bar->foo = 'foo';
$bar->bar = 'bar';

echo $bar->foo . $bar->bar;
 
Zurück