Klassen Variable kann nicht gesetzt werden

Briefkasten

Erfahrenes Mitglied
Hallo,

ich hab ein merkwürdiges problem, ich muss einer variable 2mal den wert zuweisen bis sie diesen übernimmt.

PHP:
...
$tpl = new tplengine();
$tpl->header["header"] = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
var_dump($tpl->header["header"]); //gibt NULL zurück
$tpl->header["header"] = "asdfsdf";
var_dump($tpl->header["header"]); //gibt asdfsdf zurück
...

Klasse

PHP:
...
private $m_tpl_vars = array(""=>"header");
...
public function __set($var,$value)
    {
        switch($var)
        {
            case "contentmembers":
                $this->contentmembers = $value;
                break;
            case "header":
                $this->m_tpl_vars["header"] = $value;
                break;
            default:
                echo "Fehler: Diese Eigenschaft ist nicht vorhanden!";
                break;
        }
    }

Hat jemand eine Idee woran das liegen könnte?
 
PHP:
private $m_tpl_vars = array(""=>"header");

Was soll dieses Konstrukt?
Warum weist du einem leeren Arraykey etwas zu?

Weiterhin würde ich statt der doppelten Anführungszeichen, einzelne nehmen.
"Dann weiß PHP; ah da steht ein absoluter Wert, den muss ich nicht parsen."

Hast du vielleicht auch die magische Methode __get verwendet?
 
Ich weiß nicht, wie ich überprüfen kann ob bereits ein header abgeschickt wurde.
Also schick ich nur einen header ab, wenn in dieser Variable etwas drinnen steht. Wenn der Benutzer die Variable setzt, wird der header abgeschickt, anstonsten nicht.

PHP:
public function __get($var)
	{
		switch($var)
		{
			case "contentmembers":
				return $this->m_contentmembers;
				break;
			case "header":
				return $this->m_tpl_vars;
				break;
			default:
				echo "Fehler: Diese Eigenschaft ist nicht vorhanden!";
				break;
		}
	}

Das __get wird eher eine Nebenrolle spielen. Komischerweise funktioniert das setzen vom Wert bei der Variable contentmembers. Nur bei dem Assoz. Array nicht.

Jemand eine Idee?
 
Ok, der Fehler liegt daran, dass du versucht es als Array anzusprechen.

PHP:
<?php

class mmTest
{
public $m_tpl_vars = array();

  public function __set($var, $value)
  {
    print 'Anfrage: Var: '. $var .' => '. $value .'<br>';
    switch($var)
    {
      case "contentmembers":
        $this->contentmembers = $value;
      break;
      case "header":
        $this->m_tpl_vars["header"] = $value;
      break;
      default:
        echo "Fehler: Diese Eigenschaft ist nicht vorhanden!";
    }
  }
}

$test = new mmTest;

$test->header = "test";

# Ausgabe: Anfrage: Var: header test

$test->header['test'] = "test";

# Keine Ausgabe
?>

Wie du siehst, funktioniert deine Weise nicht. Es ruft nicht die __set Methode auf.

Die Frage ist, was versuchst du überhaupt durchzuführen? Möchtest du je nach Typus in einem anderen Array abspeichern?
 
Zurück