PHP - Best Practice für die Übergabe von Variablen Include-Dateien
Dies ist mehr eine "Wie sollte ich? "anstatt" Wie tun ich?' Frage.
In der Regel, was als der beste Weg zur übergabe von Variablen an eine Datei enthalten?
Zum Beispiel, sagen wir, ich bin mit einem fragment für ein Menü, und wollen eines der Menüelemente aus (das aktuelle) eine bestimmte Klasse name (dies ist eine sehr generische Probe - nicht etwas, was ich bin tatsächlich mit):
<?php
$links = array(
array('text' => 'home', 'href' => 'home.php'),
array('text' => 'about', 'href' => 'about.php'),
array('text' => 'contact', 'href' => 'contact.php')
);
?>
<ul>
<?php for($i = 0; $i < 3; $i++) :
$link = $links[$i];
$is_active = ($i == $active_index);
?>
<li><a <?=($is_active ? 'class="active"' : '')?> href="<?=$link['href']?>"><?=$link['text']?></a></li>
<?php endfor; ?>
</ul>
ich rufe die oben 'menu.inc.php'. offensichtlich sieht es für eine variable (int) aufgerufen $active_index
zu bestimmen, die einen link zu geben '.active' - Klasse.
so könnte man einfach definieren $active_index
vor dem Aufruf die gehören, aber dies scheint wie eine schlechte Praxis, um mir da vielleicht eine variable mit diesem Namen könnte die definiert worden sind, etwas anderes zu früheren und einen späteren Teil des Skriptes ist immer noch auf der Suche für Sie.
oder - Sie können einen absoluten Pfad und fügen Sie Variablen mit einem querystring (include 'menu.inc.php?active_index=1'
), aber das scheint wie eine schlechte Idee, da brauchst du die 'echte' $_GET
innerhalb einer bestimmten include
.
oder - Sie können beginnen, jedes enthaltene Datei mit ob_start
und zurück ob_end_clean()
, dann verwenden Sie etwas wie diese zu bekommen, die Rückkehr:
function load_view($file, $variables){
extract($variables);
return include($file);
}
//passed like
<?=load_view('menu.inc.php', array('active_index' => 2))?>
aber auch dies scheint eine Reihe von Nachteilen (mit bis zu restrukturieren, alle Ihre include-Dateien entsprechend mit den ob
Funktionen und eine return
- Anweisung).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich wie ein Objekt für diese, wie beschrieben in diesem MVC-stack-post. In einer Datei namens viewMenu.class.php,
Definieren $active_link innerhalb der view-Methode enthält den Geltungsbereich von Variablen von $active_link innerhalb der Methode. Dann nennen Sie diesen code:
Allerdings bin ich mir fast neue MVC in PHP, und ich begrüße jeden Zweifel erhaben.
ViewMenu
übernimmt sowohl die Steuerung als auch das Modell-Rollen oben) und führt dann einen view Skript überinclude
innerhalb der Ansicht istrender()
Methode. Man könnte den gleichen Effekt erzielen, vor, indem er die$active_link
lokale variable und es in das mitgelieferte Skript mit$this->active_link
.Persönlich würde ich einfach definieren
$active_index
vor darunter, oder, dass vielleicht ein wenig mehr inline-gute programmierpraktiken, stellen Sie die Menü-Generierung eine Funktion mit einem$active_index
parameter.Beispielsweise (verzeihen Sie das Chaos, das folgt):
und: