Guten Abend,
ich habe im Moment ein Problem, das mich vor einiger Zeit dazu bewegte, PHP den Rücken zukehren und mich jetzt, da ich einen Auftrag für PHP-Projekt habe, erneut konfrontiert.
Und zwar geht es um das nicht vorhandene Package-Feature und die damit nur eingeschränkt mögliche, objektorientierte Programmierung in PHP.
Beispiel 1:
loadTemplate() soll ein Template laden, daraus ein Template-Objekt erstellen und dieses zurückgeben.
Beispiel 2:
Hier erstellt loadTemplate() nur das Template-Objekt, der Konstruktor von Template kümmert sich um das Laden des eigentlichen Templates.
Beide Fälle haben jedoch ihre Schwächen:
Bei beiden kann man nicht nur über loadTemplate() Template-Objekte erstellen. In 1) müsste man dazu dem Template-Konstruktor den Inhalt des Templates, in 2) nur den Namen übergeben.
Ich möchte das Erstellen von Template-Instanzen nur der TemplateEngine-Klasse erlauben, TemplateEngine soll dem Benutzer demzufolge als Schnittstelle dienen.
In Java wäre dies einfach zu realisieren, indem TemplateEngine und Template in ein eigenes Package ausgelagert werden und der Zugriff auf den Konstruktor von Template auf solche aus dem Package beschränkt wird.
Dies ist offensichtlich ein große Design-Schwäche von PHP, von der meines Wissens noch nicht einmal klar ist, ob sie in PHP6 durch Packages oder Namespaces behoben wird. Für mich viel wichtiger ist deshalb die Frage, ob es ein Design Pattern gibt, mit dem man dieses Problem möglichst umgehen und sauber lösen kann?
codethief.
ich habe im Moment ein Problem, das mich vor einiger Zeit dazu bewegte, PHP den Rücken zukehren und mich jetzt, da ich einen Auftrag für PHP-Projekt habe, erneut konfrontiert.
Und zwar geht es um das nicht vorhandene Package-Feature und die damit nur eingeschränkt mögliche, objektorientierte Programmierung in PHP.
Beispiel 1:
PHP-Code:
<?php
class TemplateEngine
{
// ...
public function loadTemplate($name)
{
// ...
return new Template($content);
}
// ...
}
class Template
{
// ...
public function __construct($content)
{
// ...
}
// ...
}
?>
Beispiel 2:
PHP-Code:
<?php
class TemplateEngine
{
// ...
public function loadTemplate($name)
{
return new Template($name);
}
// ...
}
class Template
{
// ...
public function __construct($name)
{
// ...
}
// ...
}
?>
Beide Fälle haben jedoch ihre Schwächen:
Bei beiden kann man nicht nur über loadTemplate() Template-Objekte erstellen. In 1) müsste man dazu dem Template-Konstruktor den Inhalt des Templates, in 2) nur den Namen übergeben.
Ich möchte das Erstellen von Template-Instanzen nur der TemplateEngine-Klasse erlauben, TemplateEngine soll dem Benutzer demzufolge als Schnittstelle dienen.
In Java wäre dies einfach zu realisieren, indem TemplateEngine und Template in ein eigenes Package ausgelagert werden und der Zugriff auf den Konstruktor von Template auf solche aus dem Package beschränkt wird.
Dies ist offensichtlich ein große Design-Schwäche von PHP, von der meines Wissens noch nicht einmal klar ist, ob sie in PHP6 durch Packages oder Namespaces behoben wird. Für mich viel wichtiger ist deshalb die Frage, ob es ein Design Pattern gibt, mit dem man dieses Problem möglichst umgehen und sauber lösen kann?
codethief.