Design Pattern für fehlenden Packagezugriff

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Design Pattern für fehlenden Packagezugriff

    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:
    PHP-Code:
    <?php
    class TemplateEngine
    {
        
    // ...
        
    public function loadTemplate($name)
        {
            
    // ...
            
    return new Template($content);
        }
        
    // ...
    }

    class 
    Template
    {
        
    // ...
        
    public function __construct($content)
        {
            
    // ...
        
    }
        
    // ...
    }
    ?>
    loadTemplate() soll ein Template laden, daraus ein Template-Objekt erstellen und dieses zurückgeben.

    Beispiel 2:
    PHP-Code:
    <?php
    class TemplateEngine
    {
        
    // ...
        
    public function loadTemplate($name)
        {
            return new 
    Template($name);
        }
        
    // ...
    }

    class 
    Template
    {
        
    // ...
        
    public function __construct($name)
        {
            
    // ...
        
    }
        
    // ...
    }
    ?>
    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.
    Wo Heidis Geburtstag zu Heidi's Geburtstag wird, wird Widerstand zur Pflicht.
Lädt...
X