Aus mehreren Klassen ein Objekt bilden.

xtramen01

Erfahrenes Mitglied
Hallo Leute,

ich habe mal wieder ein Problem bei dem ich nicht alleine weiter komme.

Gibt es die Möglichkeit aus mehreren Klassen ein Objekt zu bilden und dieses dann so anzusprechen: $Objektname->Klassenname->Methode(), ohne dabei jede Klasse einzeln zu registrieren?

Gruss
 
Ich versteh die Frage nicht.
Willst du eine Klasse aus mehreren Klassen ableiten? Oder soll eine Klasse mehrere andere Klassen als Property haben?
 
Eher das zweite denke ich.
Ich weis nicht ganz wie ich es erklären soll.

Ich habe mehrere Klassen als Module. Auf diese Klassen möchte ich in meinem Controller Zugriff haben, ohne im Controller, von jeder einzelnen Klasse ein Objekt zu erzeugen.

Da habe ich mir gedacht, ich erstelle eine eigene Klasse, welche mir es ermöglicht die ganzen Module auf einmal zu registrieren.

Z.b.

PHP:
    class Modules{

        public function __construct(){

            $this->GetModules();

	    }

	    public function GetModules(){

            new \Core\Modules\modul1;
            new \Core\Modules\modul2;
            new \Core\Modules\modul3;
            new \Core\Modules\modul4;
            new \Core\Modules\modul5;

        }

    }

Dann müsste ich im Controller nur noch ein Objekt erzeugen und kann auf alle Module zugreifen:

PHP:
$Modules = new \Core\Controller\Modules

Später sollen die Module dynamisch eingebunden werden, das ist jetzt nur zum Test so.
Der Hintergrund ist der, ich möchte später nur noch ein Modul erstellen, das dann nicht mehr extra registriert werden muss.

Das war so mein Gedankengang. Aber ich weis nicht ob das so einfach möglich ist. Ich bekomme es jedenfalls nicht hin.

P.S. habe da was von Objekt Aggregation gehört. Aber da steige ich absolut noch nicht durch. Gibt auch keine konkreten beispiele.

Das war so mein
 
öhm. Nunja, ich versteh imme rbnoch nicht genau. Du Hast deine Heubtklase Modules. Darin kommen versch. Module vor. Wann willst du diese denn instanzieren?
Und was meisnt du mit registrieren?
 
Ich meinte natürlich Instanzieren und nicht registrieren. Ich hatte mir erhofft, das es möglich ist, in der Hauptklasse Modules, die ganzen Unterklassen zu Instanzieren und daraus dann ein Objekt zu bilden, mit dem ich dann z.b. so auf die Unterklassen zugreifen kann: $Modules->modul1->Methode();

Maniac: Was meinst du genau mit Magischen Methoden? Ich verstehe nicht ganz.

Ich suche halt einen Weg, mein kleines Projekt Modular aufzubauen. Sodass man später, wenn man eine Funktionalität integrieren möchte, nicht im ganzen Quellcode rumwerkeln, sondern wirklich nur noch ein Modul erstellen muss. Die Instanz sollte dann automatisch erstellt werden. Vielleicht liege ich mit meiner Herangehensweise auch total falsch.
 
Naja, du könntest dir so eine Art Autoloader-Klasse bauen, welches dir die Instanzen aus einem Object zurückgibt. Dachte nur das dir eventuell die MAgischen Methode wie __call helfen könnte.
 
Du meinst also sowas.
PHP:
//Erstes Module
class Foo{
    public function getValue(){return 'foo';}
}
//Zweites Modul
class Bar{
    public function getValue(){return 'bar';}
}

//Modules
class Modules{
    protected $modules = array();
    public function __construct(){
        $this->modules['foo'] = new Foo();
        $this->modules['bar'] = new Bar();
    }
    //Magische Funktion um ein Property auszulesen
    public function __get($name){
        if(array_key_exists($name, $this->modules)){
            return $this->modules[$name];
        }
    }    
}

$modules = new Modules();
echo $modules->foo->getValue();
echo $modules->bar->getValue();
 
Oder noch ein bischen einfacher:
PHP:
class MyObject
{
	
	public function __get($ClassName)
	{
		$path = '';
		if(file_exists($path . $ClassName . '.php'))
		{
			require_once $path . $ClassName . '.php';
			return new $ClassName;
		}
		else
		{
			throw new Exception('Keine Klasse gefunden');
		}
	}
}

$Object = new MyObject();
echo $Object->MyClass->Test();

MyClass ist ein Klasse im selben verzeichnis mit der Methode Test().
 
Zurück