Klassen & Methoden dynamisch aufrufen.

NetBull

Erfahrenes Mitglied
Hi Leute,

ich bau gerade an was wo ich Klassen & Funktionen dynamisch einbinden möchte.
Weis aber nicht wie es geht und habe nichts gefunden.

Beispiel:
Code:
class a
	{
		function test($class, $method)
		{
			if($class=="b")
				$x = new b();
			elseif($class=="c")
				$x = new c();
			else
				echo "unbekannte Klasse"; 
		}
	}
	
	class b
	{
		function __construct($method)
		{
			if($method=="a")
				echo "methode a";
			elseif($method=="b")
				echo "methode b";
			else
				echo "unbekannte Methode der Klasse b";
		}
		
		function a()
		{
			echo "Ich bin Klasse b, methode a";
		}
		
		function b()
		{
			echo "Ich bin Klasse b, methode b";
		}
	}
	
	class c
	{
		function __construct($method)
		{
			if($method=="a")
				echo "methode a";
			elseif($method=="b")
				echo "methode b";
			else
				echo "unbekannte Methode der Klasse c";
		}
		
		function a()
		{
			echo "Ich bin Klasse c, methode a";
		}
		
		function b()
		{
			echo "Ich bin Klasse c, methode b";
		}
	}

$y = new class a("b", "a");


$y = new class a("b", "")
Natürlich soll das echo der jeweiligen übergebenen Klasse und Funktion auf gerufen werden...

Wenn es da eine Lösung zu gibt, wäre das cool.

cu s00n
deAndro
 
Was für ein echo?
Wenn du den Klassennamen 'b' übergibst, was soll dann ausgegeben werden?
 
Versuchst du vielleicht folgendes:
PHP:
<?php

class A
{
  public function e()
  {
    echo 'Hello (from A::e())';
  }
}

$className = 'A';
$funcName = 'e';
PHP:
$obj = new $className;
$obj->{$funcName}();

Das ganze geht auch mit Reflection:
PHP:
$obj = new ReflectionClass($className);
$obj->getMethod($funcName)->invoke($obj);
 
@yaslaw: Natürlich ist das nur ein Beispiel. Ich möchte Klassen und Methoden dynamisch einbinden. Also quasi ein dynamisches CallBack für AJAX oder ähnliche Funktionalitäten einbauen. Wenn ich also sage $x = new classCallBack($Class2Call, $Function2Call) dann soll $x nachher Werte der übergebenen Klasse halten oder das Object das mit der Klasse erzeugt wurde.
 
so funktioniert es:
Code:
class classCall
	{
		function __construct($aClass, $aMethod)
		{
			echo "$aClass, $aMethod<hr>";
			$obj = new $aClass($aMethod);
		}
	}
	
	class b
	{
		function __construct($method)
		{
			$this->{$method}();
		}
		
		function a()
		{
			echo "Ich bin Klasse b, methode a";
		}
		
		function b()
		{
			echo "Ich bin Klasse b, methode b";
		}
		
		function test()
		{
			echo __CLASS__."->".__FUNCTION__."()";
		}
	}
	
	class c
	{
		function __construct($method)
		{
			$this->{$method}();
		}
		
		function a()
		{
			echo "Ich bin Klasse c, methode a";
		}
		
		function b()
		{
			echo "Ich bin Klasse c, methode b";
		}
		
		function test()
		{
			echo __CLASS__."->".__FUNCTION__."()";
		}
	}
	
	$cCall = new classCall("c", "a");

Nun möchte ich gleich beim Grundaufruf eine Methode der Klasse aufrufen die in allen Klassen existiert. Ein
Code:
$cCall->test();
führt verständlicherweise zu einem Fehler,... wenn ich nun möchte das $cCall am Ende nicht auf eine Instanz der Klasse classCall zeigt sondern auf die Klasse die von ClassCall erzeugt wird? Der Konstruktor kann nichts zurückgeben.
 
Zurück