2016-03-24 13 views
0

Also im Grunde, was ich nicht durchkommen kann, ist eine Variable, die Variable von enthaltenen Datei enthält Echo.Echo-Variable mit Variable aus enthaltener Datei

Erläuterung:

Ich habe 3 Dateien:

index.php 
system/functions.php 
system/config.php 

jede Datei die andere Datei ist einschließlich, so dass sie wie ein (außer Index) arbeiten

System/functions.php enthält:

include_once $_SERVER['DOCUMENT_ROOT'].'/system/config.php'; 
include_once $_SERVER['DOCUMENT_ROOT'].'/system/connection.php'; 

System/config.php enthält: successfuly

include_once $_SERVER['DOCUMENT_ROOT'].'/system/functions.php'; 
include_once $_SERVER['DOCUMENT_ROOT'].'/system/connection.php'; 

gibt es nichts falsch mit ihm, und sie arbeiten zusammen, ohne Probleme, können sie Variablen untereinander weitergeben. ABER

Wenn ich will:

echo $message; 

Auf der index.php, die Ausgabe von der Variable nur die Zeichenfolge, und springt andere Variablen enthalten Dateien ...

In diesem Fall wird die functions.php Datei enthält

$message = $varfromconfig."Some String"; 

wo config.php enthält

$varfromconfig = "someword "; 

und wenn ich die $message zu Index Seite Echo, nur die ZeichenfolgeSome String zurückgegeben wird, ohne die Konfigurationsvariable ... Warum? (Sollte zurück someword Some String)

Vielen Dank.

Natürlich ist die index.php enthält sowohl die Konfiguration und die Funktionen ...

include_once 'system/config.php'; 
include_once 'system/connection.php'; 
include_once 'system/functions.php'; 
+0

Sie erhalten keine Fehler? Fehlerberichte sind an? – Jeff

+0

Aktivieren Sie Fehlerberichte ('error_reporting (E_ALL); ini_set ('display_errors', 1);' oben in Ihrem Skript), um zu sehen, ob '$ varfromconfig' leer oder nicht gesetzt ist. – fusion3k

+0

können Sie eine var_dump() bei $ varfromconfig tun, nachdem Sie $ Nachricht gesetzt und hier posten? – rvbarreto

Antwort

0

dies bei index.php Sie:

//include_once 'system/config.php'; remove this include from index.php 
include_once 'system/connection.php'; 
include_once 'system/functions.php'; 

OR, dies tun:

include_once 'system/config.php'; remove this include from index.php 
include_once 'system/connection.php'; 
include 'system/functions.php'; //not include_once 

Sie haben eine Schleife, wenn Sie beide einfügen. Ich stelle mir vor, Ihre Beziehung zwischen config.php und functions.php kann komplexer sein, als Sie hier geschrieben haben, so werde ich versuchen, detailliert, was passiert, so dass Sie eine andere Lösung finden können, wenn nötig.

Direkt nach laufen index.php, es fordert config.php. Dann innen config.php, dies geschieht:

config.php Einsatz functions.php, aber dann functions.php Einsatz config.php und config.php einfügen funtions.php wieder und das wird für immer halten. So PHP-Interpreter nur die Schleife brechen, bevor es geschieht und nur Import functions.php von innen config.php, aber nicht importieren config.php von innen functions.php von innen config.php . (Verdammt Anfang)

So, jetzt haben wir gerade vorbei Linie 1 von index.php und config.php zuerst importiert haben von index.php und dann functions.php von config.php . Der Interpreter hatte zuerst rot functions.php, lud seine Variablen, ging dann zu config.php und lud seine Variablen.

Also zuerst von functions.php, es läuft $message = $varfromconfig."Some String";. Sobald config.php wurde noch nicht interpretiert und $ varrfromconfig ist immer noch leer, es Assing "Some String" zu $message. Dann läuft es $varfromconfig = "someword ";, aber ohne es $message zugewiesen zu haben, weil $ Nachricht Zuordnung bereits getan wurde.

Auf der seccond Linie wird connections.php importiert und dann auf der dritten Linie versucht es functions.php, aber functions.php bereits eingefügt wurde zu importieren. Also include_once lassen Sie es nicht importiert werden.

Um dies zu lösen, sobald die Variable in functions.phpconfig.php erfordern zuerst zu laufen, Sie rufen nur für functions.php bei index.php und functions.php Anruf lassen config.php an sich. Die andere Lösung ist, include und nicht include_oncefunctions.php einfügen und lassen Sie es zweimal interpretieren.

+0

Ich verstehe jetzt, aber was ist, wenn beide Dateien sich gegenseitig brauchen? Funktionen beinhalten Config aber Config include Funktionen, ist es nicht wieder in einer Schleife? ... –

+0

@StevenDropper Das nennt man eine * zirkuläre Abhängigkeit * und ist Wahnsinn. Eine Sache kann nicht von der anderen abhängen, wenn die andere auch davon abhängt. Du musst dort etwas refactoring machen. – deceze

Verwandte Themen