Zugriff auf eine Klasseninstanz innerhalb einer Funktion einer anderen Klasse?

B

Bailor

Hallo,

Ohne viele Worte... Ich habe folgende Klassen und Instanzen:
PHP:
class Class1
{
	var $dump = "bla";
	function show()
	{
		return $this->dump;
	}
}
$class1 = new Class1();
$class1->dump = "Ausgabe";

class Class2
{
	function call()
	{
		// der String "$class1->show()" wird aus einer
		// Datenbank geholt und mit eval() ausgeführt.
		return $class1->show;
	}
}
$class2 = new Class2();
echo $class2->call();

Nun, wenn ich den Code wie oben ausführe gibt es natürlich eine Fehlermeldung, da die Instanz $class1 der Klasse Class1 natürlich nicht in dieser Funktion call() verfügbar ist.
Ich könnte diese Fehlermeldung beseitigen, indem ich die Instanz $class1 mittels global verfügbar mache, aber dies löst nicht mein Problem, da mit call nicht die Klasse Class1 angesprochen werden soll, sondern jede beliebige Klasse in meinem Projekt.

Mein letzter Versuch war, dass ich eine "Container-Klasse" schaffe, und die anderen via extend anbaue:
PHP:
class Container {}
class Class1 extends Container
{
	var $dump = "bla";
	function show()
	{
		return $this->dump;
	}
}
$class1 = new Class1();
$class1->dump = "Ausgabe";

class Element extends Container
{
	function call()
	{
		return Class1::show();
	}
}
$element = new Element();
$element->call();
Jetzt kann ich zumindest die jeweiligen Funktionen aufrufen, allerdings bekomm ich als Ausgabe nur "bla" und nicht "Ausgabe", weil er direkt auf die Funktion show der Klasse Class1 zugreift, und die Veränderungen durch die Instanz $class1 ignoriert.

Genausowenig hilft es etwas, einen Constructor laufen zu lassen; er greift stur nur auf die ursprüngliche Funktion + Werte zu.

Tja nun... Hat irgendjemand eine Idee, wie ich dieses Problem lösen könnte?

Dazu nochmal meine Zielvorstellung:
In der Datenbank stehen Funktions- bzw. Klassen-Aufrufe; diese werden ausgelesen, überprüft ob sie ausführbar sind und dann aufgerufen und ausgeben.
Wichtig: Ich will auf Instanzen zugreifen.


Für Hilfe wär ich dankbar...
Grüße, Bailor
 
Zuletzt bearbeitet von einem Moderator:
birnkammer hat gesagt.:
Domit ich das richtig verstehe: Du willst in der Klasse Class2 auf eine Methode in der Klasse Class1 zugreifen?
Jein. Ich will eigentlich auf die Instanz von Class1 zugreifen.
Denn wenn ich "nur" auf die Methode zugreife, kann ich auf keine extra gesetzten Variablen (etc) zugreifen... (siehe oben 1. beitrag)

Dass ich, wenn ich die eine Klasse durch die andere mit extend erweitere, auf die Methoden zugreifen kann, ist mir klar :)
 
hm, dann muss ich wohl zuvor irgendetwas falsch gemacht haben...
Ich war fest davon überzeugt, dass folgender Schnipsel nicht funktioniert. Doch siehe da, er tuts wunderbar :)
PHP:
eval('global $class1;');
Damit sollte ichs schaffen... danke für die antwort ;)
 

Neue Beiträge

Zurück