kostenloser Webspace werbefrei: lima-city


[PHP] Template System, Parameter & Scope

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    midwar

    midwar hat kostenlosen Webspace.

    Hi,

    ich habe für ein eigenes Projekt ein ganz einfaches Templatesystem geschrieben. Hierbei gehe ich so vor, dass am Anfang von index.php alle Grunddaten eingebunden werden (also include basic.php, variables.php und connect.php) und anschließend je nachdem welche Seite über GET angefordert wurde das "Logic File" der entsprechenden Seite ausgeführt wird. Dieses arbeitet die eigentlich Logik ab, Datenbankzugriffe, Eingabenüberprüfung, etc. und sendet mit return einen Rückgabewert zurück, ob das ganze geklappt hat, was geklappt hat, Infotexte, etc. Anschließend wird das entsprechende Templatefile eingebunden in index.php und die per return zurückgegebenen Daten aus dem "Logic File" werden im Templatefile dargestellt. So weit so gut.

    Da ich nun jedesmal ein bestimmte File XY aufrufen muss per include und überprüfen muss, ob dies gelingt per Exceptions, habe ich das ganze in eine eigene Funktion ausgelagert, damit ich einfach nur $Basic->GetFile($File); aufrufen muss. Nun habe ich aber das Problem, dass die Variablen in index.php vorher immer für die entsprechende include Direktive funktioniert haben, da sie ja im richtigen Scope waren. Wenn ich in index.php geschrieben habe include("home.php"); konnte home.php immer auf $Connect zugreifen, sollte dieses gebraucht werden, da ich es ja ganz am Anfang über connect.php eingebunden habe. Mit der neuen Funktion, liegt $Connect natürlich nicht mehr im Scope der Funktion $Basic->GetFile(); und ich kann das ganze nicht mehr so weiterführen wie vorher. Dann habe ich anschließend einen Riesenaufwand betrieben und angefangen zusätzliche Parameter einzuführen. Nun sieht GetFile() so aus:

    $Basic->GetFile("home.php",$Connection,'Connection');

    Wenn home.php die Variable $Connection aus dem Scope von index.php benötigt, übergebe ich sie einfach mit. Der Parameter danach teilt der Funktion einfach mit unter welchem Namen die Variable $Connection verfügbar sein soll (In dem Fall soll $Connection als 'Connection' verfügbar sein). Dies ist nötig, da ich vorher nicht weiß welche Variablen das $File benötigt und sich das von Aufruf zu Aufruf wandelt. Manchmal benötigt sie 3 Variablen, dann sieht der Aufruf so aus:

    $Basic->GetFile($File,$Connection,'Connection',$Var2,'Var2',$Var3,'VAR3ASTEST');

    Das ganze funktioniert zwar jetzt und ich habe in index.php viel Platz gespart, da ich jetzt nicht ewig einzeln die Seiten jedesmal aufrufen muss, testen muss ob die Verfügbar waren, Exceptions abfangen, etc, aber das ist trotzdem keine tolle Lösung. Wenn ich zu dem Projekt später ein Forum hinzubastel, würde jedes mal später von allen Variablen die in $File benötigt werden eine Kopie angefertigt werden und das ganze irgendwann sehr Performancelastig werden. Was soll ich jetzt also machen?

    1. Das ganze Rückgängig machen? Fände ich nicht so toll, da es ja das DRY Prinzip gibt und wieso sollte ich an allen Stellen in index.php den gleichen Code jedes mal neu ausführen, wenn ich das ganze in einer Funktion besser machen könnte?
    2. Es so lassen wie es ist? Dann würde das ganze irgendwann sehr aufgeblasen werden, wenn die übergebenen Variablen sehr groß werden - wie z.B. bei dem noch einzubauendem Forum. Außerdem ist das meiner Meinung nach keine saubere Lösung.
    3. Die Variablen als Referenz übergeben? Dann würde keine Kopie angelegt und ich würde auf der gleichen Variable arbeiten.
    4. Habt ihr ne andere Lösung, um das Problem zu umgehen? Prinzipiell geht es ja nur um das Problem, dass ich das includen eines Files und überprüfen, ob das geklappt hat in eine Funktion auslagern will. Dies geht nicht einfach so, weil die Variablen in index.php nicht in der Funktion selber zur Verfügung stehen. Wie lösen?

    Danke :)
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. h**s

    lange rede kurzer sinn:
    wenn du variablen innerhalb von funktionen verfügbar haben willst würd ichs mal mit
    global $foo
    probieren...
  4. Autor dieses Themas

    midwar

    midwar hat kostenlosen Webspace.

    hcms schrieb:
    lange rede kurzer sinn:
    wenn du variablen innerhalb von funktionen verfügbar haben willst würd ichs mal mit
    global $foo
    probieren...


    Schon klar, aber mir wurde oft gesagt, dass ich global unterlassen soll, da es "böse" ist. ;)

    Ich möchte an dem Projekt was lernen, nicht immer den gleichen Murks machen. Ich möchte daran lernen, wie ich es besser machen könnte und das schließt SAUBER mit ein. Global hingegen erachte ich nicht als sauber.
  5. midwar schrieb:
    ... Global hingegen erachte ich nicht als sauber.
    quelle nennen!

    ohne 'global $var; so
    <?php
    $var = 'value';
    
    function test() {
      echo "die globale variable ist {$GLOBALS['var']}";
    }


    Beitrag zuletzt geändert: 17.3.2013 18:04:35 von czibere
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!