Hallo!
Ich habe mit folgem Code Probleme:
Code:
<?
class test
{
function test_function()
{
echo "test";
$this->test_custom();
}
}
class test1 extends test
{
var $link;
function test_xx()
{
$this->link->test_function();
}
function test_custom()
{
// Variante 1
}
}
class test2 extends test
{
var $link;
function test_xx()
{
$this->link->test_function();
}
function test_custom()
{
// Variante 2
}
}
$o1 = new test1();
$o2 = new test2();
$o1->$link = &$o2;
$o2->$link = &$o1;
$o1->test_xx();
$o2->test_xx();
?>
Ich möchte folgende erreichen: Generiere 2 Objekte $o1, $o2, speichere Referenzen in $o1->link auf $o2 und in $o2->link auf $o1. Dann rufe ich $o1->test_xx() auf und damit sollte dann möglichst $o2->test_function() aufgerufen werden und damit u.a. test_custom() von $o2 ausgeführt werden.
Das ganze sieht vielleicht etwas sinnvoll aus, aber ich brauche es wirklich so. Der Zusammenhang ist etwas größer, aber ich möchte euch das ersparen.
Das funktioniert so nicht und ich kann es auch verstehen. Es ist ja u.a. PHP vor der Generation der Objekte und dem $o1->$link = &$o2; noch gar nicht klar, was sich hinter $link verbirgt. Entsprechend ist auch die Fehlermeldung:
Fatal error: Call to a member function on a non-object in ...../test.php on line 18
Es bezieht sich auf die Zeile: $this->link->test_function(); in der Klasse test1. Ich könnte mir vorstellen, dass es helfen würde, wenn man PHP irgendwie klar machen könnte, dass es sich bei $link um eine Referenz auf ein Objekt von der Klasse test (bzw. test1 / test2) handelt. Aber geht sowas? Ich hab noch nicht gesehen, wie man Typen explizit angeben kann in PHP.
Ich bin für alle Tips dankbar,
flo