Ich glaube, was du suchst nennt man "Abstrakte Klasse".
Eine Abstrakte Klasse stellt eine sog. Factory-Methode zur Verfügung, mit der man Module der Klasse hinzuladen kann.
Ein weiterer Vorteil ist, das man bei der Instanzierung einer Klasse über die Factory-Methode bei einem Fehler diesen auch zurückgeben kann (was ein normaler Konstruktor ja nicht drauf hat). Die Klasse ist abstrakt, weil sie keinen eigenen Konstruktor hat und damit nicht direkt instanziert werden kann.
Da die Factory-Methode ein neues Objekt zurückliefert (im Erfolgsfall), sollte man die Rückgabe referenzieren! In PHP5 ist dies (glaub ich) nicht mehr nötig...
Ein Beispiel: (PHP4!!!)
PHP-Code:
// Abstrakte Klasse
// $type = Name des Moduls
// Datei foo.php
class foo
{
// Factory-Methode
function &factory($type,$params) {
if(is_string($type)) {
@include_once($type.".php");
$bar=&new $type($params);
if(is_object($bar)) {
return $bar;
} else {
return "Klasse konnte nicht instanziert werden!";
}
} else {
return "$type muss ein String und ein gültiger Klassenname sein!";
}
}
}
// Modul muss als eigene Datei abgelegt werden
// Datei bar.php
class bar
{
var $_params=array();
// Konstruktor
function bar($params) {
$this->_params=$params;
}
// ne Methode
function getParams() {
return $this->_params;
}
}
// Verwendung
// Datei use_foobar.php
require_once("foo.php");
$params=array('hallo'=>'welt');
$foobar=&foo::factory('bar',$params);
if(is_object($foobar)) {
// Klasse geladen
print_r($foobar->getParams());
} else {
// Fehler
echo $foobar;
}
Dabei kann die Klasse bar auf foo aufbauen (class bar extends foo), muss sie aber nicht!
Ich hoffe, ich hab dich richtig verstanden und konnte dir helfen.
Grüße,
Marco