Code:
// Deklariere das Interface (Methoden die die Klasse haben muss)
interface iTemplate
{
public function setVariable($name, $var);
public function getHtml($template);
}
// Klasse die erweitert wird
class TemplateClassWithoutPlugin implements iTemplate
{
public function setVariable($name, $var)
{
echo 'ich mache garnix mit '.$name.' und '.$var;
return $this;
}
public function getHtml($template)
{
echo 'ich mache garnix mit '.$template;
}
}
// Implementiere Klasse die Methoden des Interfaces haben muss, das musst du irgendwie einbinden (dir fällt schon was ein, was weiß ich include oder so)
class Template extends TemplateClassWithoutPlugin implements iTemplate
{
private $vars = array();
public function setVariable($name, $var)
{
$this->vars[$name] = $var;
return $this; // Instanz auskacken sonst kein kuhles $class->bla()->blub(); möglich
}
public function getHtml($template)
{
foreach($this->vars as $name => $value) {
$template = str_replace('{' . $name . '}', $value, $template);
}
return $template;
}
}
$pluginName = 'Template'; // hier auch entsprechend der eingebundenen Klasse anpassen (z.b. selber Klassenname wie Dateiname), vorher war der String hier TemplateClassWithoutPlugin
// Klasse dynamisch schneidig instanzieren
$plugin = new $pluginName();
// Methoden aufrufen
$returnValue = $plugin->setVariable('la', 'lu')->getHtml('lalulilula');
echo $returnValue;
Code ungetestet und zusammengeklaut. (inklusive coolen Moves)
Siehe:
PHP OOP
PHP Interfaces
EDIT: nochmals geändert damit alles klarer wird