Variablen von Klassen von außen verändern und "innen" nutzen

solar22

Mitglied
Hallo,
ich hab mal eine Frage zu OOP.
Ich möchte ein Script schreiben (einfach zum lernen), welches eine Variable in einer Klasse ändert und dann die Klasse ausführt und die Variable ausgibt.
(Ich verzichte hier absichtlich auf die Verwendung von Parametern [außer auf einen].)

Dazu muss man sagen, das die Klasse "MyClass()" die Verwaltungsklasse für alle anderen Klassen ist. Es wird also ein wenig rekursiv^^

Soweit bin ich schon:
datei1.php:
PHP:
$class = new MyClass("TestClass");
$class->getParam("foo=bar");
$content = $p=getContent();

MyClass() relevanter Ausschnitt, wo der Fehler sein könnte:
PHP:
  public function getParam($param) {

	$p = explode("=",$param);	

	$name = $p[0];

	$this->pClass->$name=$p[1];
    //$this->pClass wird im __constructor mit "TestClass" belegt, oben in datei1.php wird dieser Parameter als einziger übergeben.
  }

Und nun die TestClass():

PHP:
<?php
class TestClass {

	public $foo;  //ist definiert, um zu ändern

	function __constructor() {
	}
		
	function run() {
		return "foo: ".$this->foo;
	}

}

Wenn ich mal testweise ein paar echos an relevanten Stellen einbaue, um zu sehen, was das Script so übergibt schreibt er folgendes:
Code:
TestClass initialisiert...
Parameter: TestClass -- foo=bar
Hole Content von TestClass

Doch als Ausgabe kommt nur:
Code:
foo:

Mir kommt es also so vor, als würde der Wert nicht richtig gesetzt, denn er liest die Variable nicht aus, tu ich jedoch in der Funktion getParam() ein echo $this->pClass->$name dann erscheint der gewünschte Inhalt "bar".

Ich weiß nicht, wo der Fehler stecken könnte, könnt Ihr mir helfen?

Danke im vorraus!

Gruß.
solar22
 
Hab mal versucht dein Ding nachzubauen. Bei mir funktioniert es

PHP:
<?php

class TestClass {
    public $foo;  //ist definiert, um zu ändern
    public function run() {
        return "foo: ".$this->foo;
    }

}

class MyClass {
    public function __construct($className){
        $this->pClass = new $className;
    }
    
    public function getParam($param) {
        $p = explode("=",$param);    
        $name = $p[0];
        $this->pClass->$name=$p[1];
    }      
}

$class = new MyClass('TestClass');
$class->getParam("foo=bar");
echo $class->pClass->run();  
?>

Ach, anstelle von __constructor() solltest du __construct() verwenden, damit du einen Konstrukteur haben willst
 
Also ich weiß ja nicht, aber wären hier nicht [phpf]__set[/phpf] und [phpf]__get[/phpf] perfekt für geeignet?
Wenn ich es richtig verstanden habe?
 
@yaslaw:
Dein Beispielcode hat mir meinen Fehler gezeigt.
Ich hab in meiner MyClass einen Fehler gehabt, das er leider die Klasse neu definiert und somit die Erstzung des Parameters ignoriert^^
Jetzt gehts.
So leicht passieren Fehler :D

Danke dir!
 
Zurück