PHP define Umfang für die im Lieferumfang enthaltene Datei
Ich habe ganz viele PHP-Dateien anzeigen, die ich verwendet, um meine Controller mit einfachen include-Anweisungen. Sie benutzen alle Methoden deklariert, die in einer view-Klasse, die Sie bekommen, wie $view->Methode (die); Allerdings habe ich vor kurzem beschlossen, dass es besser wäre, wenn die darunter würde auch diese Ansicht Klasse. Dies jedoch ändert sich der Umfang der Datei enthalten, so dass $view ist nicht mehr definiert.
Hier ist ein code Beispiel:
in someViewFile.php (BOTH siuations)
<html>
<head><title><?php echo $view->getAppTitle(); ?></title>
etc.
OLD SITUATION in controller:
$view = new view;
include('someViewFile.php'); //$view is defined in someViewFile.php
NEW SITUATION in controller:
$view = new view;
$view->show('someViewFile'); //$view is not defined in someViewFile.php
Ich jetzt gehackt meinem Weg, um das problem der Verwendung dieser in der view-Klasse:
public function show($file){
$view = &$this;
include($file.".php");
}
Ist es jedenfalls zu erklären, den Umfang der Datei inluded oder ist das der beste Weg zur Lösung des Problems?
Diese Beispiele sind aus grob vereinfacht.
InformationsquelleAutor Pim Jager | 2009-02-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht ändern include () - scope, Nein, also deine Methode ist wahrscheinlich ungefähr so gut wie es geht in der situation, die Sie beschreiben. Obwohl ich überspringen die hässliche PHP4-compat kaufmännisches und, mich.
InformationsquelleAutor chaos
Hier' eine einfache aber funktionale Sicht Klasse, die ich gesehen habe um ganz viel und ganz viel.
Wie Sie sehen können, in den folgenden code: Sie instanziieren Sie ein view mit dem Namen der template-Datei.
Der client-code, wahrscheinlich ein controller, kann das senden von Daten in die Ansicht. Diese Daten können beliebigen Typs sein müssen Sie auch andere Ansichten.
Verschachtelte Ansichten werden automatisch gerendert, wenn der Elternteil erbracht wird.
Hoffe, das hilft.
Nutzung
Den Vorlagen
In der Tat, das Mitglied und seine Nutzung sind
filname
wo die Zuordnung istfilename
. Ich habe versucht, diese zu Bearbeiten, aber ein edit-benötigt 6 Zeichen der Veränderung. roll eyesTippfehler korrigiert - danke für den Hinweis it out
Vielen Dank! Ich habe reverse-Geist-flow über die Vorlagen. Ich kann es für mein Projekt ohne irgendwelche frameworks.
Vereinfacht die view-Klasse noch weiter unten, würde mich über feedback freuen.
InformationsquelleAutor meouw
Ist, was ich Tue ( ich weiß nicht, wie OK es ist) ist einfach
Sicher wie die Hölle funktioniert
Prost!
InformationsquelleAutor droope
Eine noch mehr vereinfachte version des View-Klasse:
Controller:
In der Vorlage/Datei anzeigen:
InformationsquelleAutor Andrew
Vielleicht hat das zu tun mit meinen php-Einstellungen oder so etwas, aber wenn ich eine Datei innerhalb einer Funktion, die eingebundene Datei nur den Rahmen, die Funktion der Variablen.
Ich denke, ich würde gehen Sie mit so etwas wie dies:
Verwendung:
InformationsquelleAutor quano
Erweitern, was Quano zu bieten hat:
Nehmen Sie es einen Schritt weiter und Variablen in den globalen Gültigkeitsbereich der Ausführung (andernfalls hätte genannt zu werden mit der globalen auf die Eingeweide enthalten). Die Idee ist, dass der include zu arbeiten, als ob Sie in Ihrem wichtigsten Anwendungsbereich oder den Umfang Ihrer definition.
Betrachten Sie diese Klasse:
Verwenden Sie es wie folgt:
Beispiel automatisch
$foo
da es im globalen Gültigkeitsbereich, und$woo
Hinzugefügt, da es im lokalen Bereich.Habe ich noch nicht getestet
$this
als eine beliebige variable, aber mein spider-Sinne sagen mir,es wird nicht funktionieren (Warnung).InformationsquelleAutor zamnuts
Fand ich eine gute Lösung. Erstellen Sie einfach eine anonyme Funktion und rufen Sie es. Nur für PHP 7+.
Beispiel:
InformationsquelleAutor Matthew Semik
Senden Sie get_defined_vars() als parameter an die Funktion view. Das erzeugt ein array mit allen definierten Variablen im aktuellen scope. In deinem "view" - Methode, die Sie aufrufen, PHP ' s "extrahieren" auf dem erhaltenen array.
InformationsquelleAutor Andrei Dan