2011-05-23 4 views
1

私のPHPコードでEOF関数を使用しています。heredoc文字列を作成するときに変数が定義されていません

しかし、私には問題があります。

別のファイルから変数を呼び出そうとすると、無視されます。

私はこのようになります別のファイル(header.inc.php)内の変数があります。

require_once('../../inc/header.inc.php'); 

:EOFコードがどこにあるかそれから私は、機能を必要と置く

$site['url']    = "http://www.mydomainname.com"; 

をEOFコードのファイルは、次のようになります。

function getServices() { 
$sCode .= <<<EOF 
<a href="{$site['url']}" class="amenu">Home</a> 
EOF; 
return $sCode; 
} 

変数$ site ['url']は、それらの機能すべて..

これは私を狂って運転している! EOFコードがその変数を無視すべき理由はありますか?

+0

'EOF'は関数ではありません。文字列を区切るための "heredoc構文"を参照しています。選択したデリミタ(たとえば 'EOF ')は比較的恣意的です。 –

+0

また、 "End of File"を意味する "EOF"を使用しないことをお勧めします。おそらくEOT(テキストの終わり)を使用してください.EOFは後であなたのコードを読んでいるかもしれない多くのプログラマーを混乱させる可能性があります。 –

答えて

4

global $site;を関数の最初の行として試してください。あなたがグローバル変数としてそれらを関数に持ってこない限り、グローバル変数はPHPで自動的には見えません。

+0

大変ありがとうございます! –

+0

@DiegoP。マイケルの提案があなたの問題を解決した場合、それを受け入れられた答えとしてマークすることを検討してください。 –

0

これはheredoc構文とは関係ありません。それは単純な変数の可視性の問題です。

getServices()一般に$site['url'](または$site)を見ることはできません。

  • $siteは、グローバル(EW)である場合には、スコープにそれをもたらすために、あなたの関数の最初の行としてglobal $site;を書きます。

  • それ以外の場合は、関数パラメータとしてgetServices()に渡します。私は右のあなたが既存のものに追加し、新しい文字列変数を作っているではないことを推測にいる場合

ところで、$sCode .= ...はおそらく、$sCode = ...でなければなりません。

関連する問題