2010-10-29 63 views
0

因此,我有一個WordPress主題。變量不會包含在不同的目錄中

在functions.php文件,我正在寫,看起來像這樣的功能:

function my_function(){ 
    $var1 = 'apple'; 
    $var2 = 'orange'; 
    include get_bloginfo('stylesheet_directory').'/lib/fruits.php'; 
} 

而且fruits.php文件看起來像這樣:

<?php 

echo "My brother's favorite fruit is an $var1, but my favorite fruit is an $var2."; 

?> 

當我打電話my_function()在我的主題中的某處,fruit.php中的echo語句顯示在屏幕上,但$ var1和$ var2的值不顯示。他們只是空白。

現在這裏是奇怪的部分。如果我移動到fruits.php同一目錄下的functions.php,並更改包括創建my_function()語句是:

include 'fruits.php'; 

2個變量顯示就好了。

任何想法可能會導致此問題?

僅供參考,我也嘗試定義路徑的變量fruits.php然後試圖

include $path; 

無濟於事。

+0

這應該工作。您的情況中還缺少一些其他信息。代碼將包含在你的函數中,這樣變量就可以被訪問。奇怪的是,你預先在include目錄中加入了wordpress'stylesheet_directory'這是一個URL,而不是一個文件路徑,因此它不應該被用來在PHP中包含文件。 – webbiedave 2010-10-29 06:34:05

+0

謝謝webbiedave。你的直覺是對的。我將包含路徑改爲使用常量STYLESHEETPATH,而現在它完美地工作。雖然,似乎PHP的部分奇怪的行爲。在我原來的代碼中,它確實包含了該文件,但它不會將變量傳遞給它。爲什麼只能這樣工作呢?那麼,無論如何,我將來都會記住這一點。再次感謝。 – mjsiemer 2010-10-29 16:12:40

回答

1

您正在預先考慮包含wordpress的目錄stylesheet_directory(而不是STYLESHEETPATH常量),這是一個URL,而不是一個文件路徑,因此它不應該用於包含PHP中的文件。將其更改爲正確包含該文件。

1

這裏有與該函數的變量範圍的問題。基本上你有一個文件,可以說index.php其中你包括從其他目錄functions.php。在那個functions.php中,你可以在一個函數範圍內定義兩個變量 - 這意味着變量只在函數中可見。此外,該功能還包括fruits.php文件。

由於fruits.php在技術上是index.php包括在內,它會尋找變量$var1和內index.php$var2,他們尚未確定那裏,因爲它們是在功能的範圍內確定。基本上它尋找一個它看不到的變量。

這裏有兩種方法來解決這個問題:

方法1:

修改功能如下。

function my_function(){ 
    global $var1 = 'apple'; 
    global $var2 = 'orange'; 
    include get_bloginfo('stylesheet_directory').'/lib/fruits.php'; 
} 

這樣你迫使變量沒有在函數中是可見的,但是是全球性的,或者換句話說,是整個文件中可見。

方法2:

定義功能以外的變量。

$var1 = 'apple'; 
$var2 = 'orange'; 
function my_function(){ 
    include get_bloginfo('stylesheet_directory').'/lib/fruits.php'; 
} 

有關變量的作用域的更多信息,你可以去這裏http://php.net/manual/en/language.variables.scope.php

希望這有助於。

+0

你的聲明'它在index.php中尋找變量$ var1和$ var2'是不正確的。由於OP在函數中包含文件,因此它繼承與函數相同的範圍。另外,您不能像方法1中那樣執行全局關鍵字的分配。您的方法2將確保變量不會被包含的代碼訪問,因爲它們在函數之外聲明。 – webbiedave 2010-10-29 06:36:27

+0

什麼是OP?關於方法2,我不同意。如果在'functions.php'中聲明瞭兩個變量'$ var1'和'$ var2',在'index.php'中聲明瞭'require_once(「dir/functions.php」)'',那麼這兩個變量也在' index.php'因此'fruits.php'可以訪問它們。我今天將嘗試使用這兩種方法的代碼,以查看PHP是否爲這兩種方式提供了任何錯誤。生病編輯答案讓人們知道發生了什麼。 – miki725 2010-10-29 11:55:31

+0

感謝您的詳細解答。儘管如此,Webbiedave在他對我的原始評論中是正確的。請參閱上文。 – mjsiemer 2010-10-29 16:13:33

相關問題