2016-07-12 13 views
0

私が作業しているページでは、最初に私のtools.phpファイルが含まれています。 index.php関数内で "require"を呼び出す

require("../scripts/tools.php"); 

次に、私はカスタムCSS

$custom_css = [ 
    $link([ 
     "rel" => "stylesheet", 
     "type" => "text/css", 
     "media" => "screen", 
     "href" => BASE . "css/layout-list.css", 
     ]), 
]; 

を作成し、カスタムを使用してヘッド素子を有しtools.php内で宣言された関数を必要とする、と言います。

req("template/head.php"); 

私はフォルダ構造でより深く行く各パスのたびに../ Sを増やす必要があるので、私はカスタムrequireを使用している理由があります。私は手動でそれらを追加したくありません。

ありbase()関数はtools.phpであり、それは自動的にメインフォルダに到達するのに必要../ Sを算出し、BASE定数に割り当てます。このBASE定数はreq()機能

function req($path) { 
    require(BASE . $path); 
} 

これに使用されている(一種の)動作します。問題は、(実際の)requireが関数内で呼び出されたため、は$custom_cssにアクセスできず、index.phphead.php内の変数にアクセスできません。


解決策は、使用する前に変数がグローバルであることを宣言することです。

global $custom_css; 
if (!isset($custom_css)) { 
    $custom_css = []; 
} 

を、私はindex.phpからhead.php中だ変数にアクセスする必要がある場合、私は、グローバル変数を宣言する必要があります。私はhead.phpで、head.phpからindex.php中です$custom_cssにアクセスする必要がある場合

だから、私はやります内部はhead.php

global $head_var; 
$head_var = 4; 

このプロセスは非常に疲れて冗長に見えます。 requireがどこに影響を与えるかを変更する方法はありませんか?ファイルが関数に含まれていても、インクルードされたファイルのすべての変数をグローバルにしますか?

+0

'require(req( 'someting_here'));'のようなことはできませんか?必要なものを返すだけで、関数内で 'require()'しないでください。 – FirstOne

+0

@FirstOne私はBeetleJuiceの答えと私のコメントを読んだとします。一般的な解決策がない場合、私はそれを使用する可能性が高いです。 – akinuri

答えて

0

カスタムreqがすべてtools.phpで定義された定数の前にある場合は、定数を直接使用しないでください。

require(BASE."template/head.php"); 
+0

当初、私がやったことです。しかしもっと一般的な解決策があるのであれば私は興味があります。私はテンプレートを作成して以来、私はたくさんのことをしています。 'require(BASE。" file.php ")の代わりに' req( "file.php") 'を使うと、はるかに洗練されているように思えますが、困ってしまいます。 – akinuri

関連する問題