Klein0r
Erfahrenes Mitglied
Hallo zusammen!
Ich habe mir neulich ein Konzept für die Darstellung von Inhalt auf meiner Seite überlegt - Objektorientiert. Dabei erbt jede Klasse die etwas darstellen möchte von folgender Klasse:
Dabei übergebe ich im Konstruktor einige Werte. Nun habe ich in meiner Index.php folgenden Quellcode:
Dabei würde in der Zeile
doch aber eigentlich der Konstruktor der Vererbten Klasse ausgeführt, oder nicht? Soweit ich weiß werden in der Objektorientierung Konstruktoren normalerweise nicht mit vererbt. Ist das in PHP anders? Warum sollte mein Script sonst funktionieren?
Wenn ich im Konstruktor von meiner Klasse IncludeModel ein echo hinzufüge wird dieses auch ausgeführt, obwohl eigentlich eine Instanz einer ganz anderen Klasse erstellt wird...
Warum geht das Ein Gedankenfehler der trotzdem funktioniert... Ist mir gestern Abend im Bett eingefallen als ich nicht schlafen konnte
lg
Ich habe mir neulich ein Konzept für die Darstellung von Inhalt auf meiner Seite überlegt - Objektorientiert. Dabei erbt jede Klasse die etwas darstellen möchte von folgender Klasse:
PHP:
<?
abstract class IncludeModel {
protected $filename;
protected $file_parameters;
protected $sqlconn;
protected $user;
protected $bbcode;
public function IncludeModel($filename, $parameters, $sqlconn, $user, $bbcode) {
$this->filename = $filename;
$this->convert_parameters($parameters);
$this->sqlconn = $sqlconn;
$this->user = $user;
$this->bbcode = $bbcode;
}
// Kann überschrieben werden
protected function get_needed_parameters() {
return null;
}
// Kann überschrieben werden
protected function search_string($value) {
return null;
}
// Kann überschrieben werden
public function get_title_extention() {
return null;
}
// Wandelt die Parameter die eingegeben wurden in lesbare Links
private function convert_parameters($parameters) {
$parameterstring = $this->get_needed_parameters();
if ($parameterstring != null) {
$exploded_names = explode("|", $parameterstring);
for ($paramcounter=0;$paramcounter<count($parameters);$paramcounter++) {
$this->file_parameters[$exploded_names[$paramcounter]] = $parameters[$paramcounter];
}
}
}
public abstract function show_content_of_file();
// Gibt die Klasse zurück - Statisch
public static function factory($page)
{
$class = 'inc_' . str_replace('/', '_', $page);
$file = './links/' . strtolower($page) . '.php';
if(!is_readable($file) || (!include_once($file))) {
throw new Exception('Datei wurde nicht gefunden.');
}
if(!class_exists($class, false)) {
throw new Exception('Keine Definition der Klasse '.$class);
}
if(!in_array(__CLASS__, class_parents($class, false))) {
throw new Exception('Alle Klassen müssen müssen Kindklassen von ' . __CLASS__ . ' sein');
}
return $class;
}
}
?>
Dabei übergebe ich im Konstruktor einige Werte. Nun habe ich in meiner Index.php folgenden Quellcode:
PHP:
$page = $_GET['load'];
if (!isset($page)) $page = 'news';
try {
$class = IncludeModel::factory($page);
$titleext = ucfirst($page);
}
catch (Exception $e) {
$class = null;
$errorlog = $e->getMessage();
$titleext = 'Fehler';
}
// Falls die Klasse gefunden wurde
if ($class != null) {
$include_page = new $class($page, $parameters, $sqlconn, $user, $bbcode);
$newext = $include_page->get_title_extention();
if ($newext != null) {
$titleext .= ' ('.$newext.')';
}
}
else {
$include_page = null;
}
Dabei würde in der Zeile
PHP:
$include_page = new $class($page, $parameters, $sqlconn, $user, $bbcode);
Wenn ich im Konstruktor von meiner Klasse IncludeModel ein echo hinzufüge wird dieses auch ausgeführt, obwohl eigentlich eine Instanz einer ganz anderen Klasse erstellt wird...
Warum geht das Ein Gedankenfehler der trotzdem funktioniert... Ist mir gestern Abend im Bett eingefallen als ich nicht schlafen konnte
lg