2016-03-24 21 views
0

ですから、基本的には、インクルードされたファイルから変数を含む変数をエコーバックすることができません。インクルード変数からインクルードされたファイル

説明:

私は3つのファイルがあります:彼らは(インデックスを除く)いずれかのように動作して

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

各ファイルが他のファイルを含めている

システム/のfunctions.phpは、以下を含む:

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

システム/ config.phpのが含まれていますが、それと間違って何もないですし、彼らは問題なく一緒に仕事

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

、彼らはsuccessfuly自分たちの間で変数を渡すことができます。 しかし

私がしたい:インクルードされたファイルからのindex.php

echo $message; 

は、出力変数から文字列のみであり、スキップ他の変数を...

この場合

のfunctions.phpファイルが

が含まれています

config.phpの

$varfromconfig = "someword "; 

が含まれていると私は$messageへのインデックスページをエコーするとき、唯一の文字列Some Stringは、設定変数なしで、返された...なぜ? (を返す必要があります)

ありがとうございます。もちろん

、index.phpのは、設定や機能の両方が含まれています...

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

エラーが発生していませんか?エラー報告は有効ですか? – Jeff

+0

'$ varfromconfig'が空であるか、設定されていないかを調べるために、エラー報告(error_reporting(E_ALL); ini_set( 'display_errors'、1);)を起動してください。 – fusion3k

+0

$ messageを設定してここに投稿した後、$ varfromconfigでvar_dump()を実行できますか? – rvbarreto

答えて

0

はindex.phpのでこれを行います。

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

OR、この操作を行います。

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

両方を挿入するとループが発生します。 config.phpfunctions.phpの関係は、あなたがここに書いたより複雑なものになる可能性があるので、何が起こっているのかを詳しく調べて、必要に応じて別の解決策を見つけることができます。

あなたがindex.phpをを実行した直後、それはのconfig.phpのために呼び出します。

config.phpの挿入のfunctions.phpが、その後のfunctions.php挿入config.phpを、およびのconfig.phpはを挿入します。次に、config.phpのの内側に、これが起こりますfuntions.phpこれは永遠に続くでしょう。だから、PHPインタプリタはちょうどそれが起こる前にループを切断し、config.phpの内部からのみのfunctions.phpをインポートしますが、config.phpの内側からのfunctions.php内部からconfig.phpのをインポートしません。 。

はだから今、私たちはただindex.phpのの1行目に合格し、index.phpのからのconfig.php最初を輸入してきたし、その後のconfig.phpからのfunctions.php(当初いまいましいです) 。インタプリタは最初に赤色のfunction.phpを持ち、その変数をロードしてからconfig.phpに行き、その変数をロードしました。

したがって、最初にfunction.phpから、$message = $varfromconfig."Some String";を実行します。 config.phpがまだ解釈されておらず、$ varfromconfigがまだ空であれば、 "Some String"は$messageになります。その後、$varfromconfig = "someword ";が実行されますが、$メッセージの割り当てがすでに完了しているため、$messageに割り当てられません。 seccondラインで

、connections.phpがインポートされ、そして次に3行目にはのfunctions.phpをインポートしようとしたが、のfunctions.phpが既に挿入しました。したがってinclude_onceはインポートできません。 のfunctions.php内の変数は、最初に実行するようにconfig.phpを必要としたら、あなただけのindex.phpをのfunctions.phpのために電話してのfunctions.phpコールを聞かせて、この問題を解決するには

config.phpもう1つの解決方法はincludeで、include_onceではなくfunctions.phpを挿入して2回解釈することです。

+0

私は今理解していますが、両方のファイルが必要な場合はどうなりますか?関数にはconfigが含まれていますが、これはループ内で再び機能しませんか?... –

+0

@StevenDropperこれは循環依存と呼ばれ、狂気です。もう片方がそれに依存している場合、一方は他方に依存することができません。あなたはそこでいくつかのリファクタリングをしなければなりません。 – deceze