2013-07-31 42 views
1

一直努力使一些簡單的代碼工作,但面臨着一個變量的全局/局部範圍的問題。PHP在任何函數之外聲明的變量,不可見於函數

這是我嘗試去上班的代碼。此代碼包含在由Javascript中的AJAX GET過程調用的PHP文件中。下面的代碼塊沒有出現任何GET變量。

$location = "./Treewindow/tree_structure.xml"; 

function openXML($url) { 
if (file_exists($url)) { 
    $xml = simplexml_load_file($url); 
    } 
else { 
    echo("Failed to open XML at ".$url); 
    exit; 
    } 
} 

function cubicleAvailableSpace() { 
    openXML($location); 
} 

當我打電話過去的功能:

cubicleAvailableSpace(); 

我得到:

Failed to open XML at 

爲什麼變量$位置不是在功能cubicleAvailableSpace公認的()?我認爲這將被視爲「可見」,從這個PHP代碼中的所有功能...

現在,我相信這很容易,但我試了整個下午,使這項工作......看着周圍的所有但找不到任何幫助我的回覆(雖然這個網站有很多這樣的例子) 當然,當我用它的實際值(「./Treewindow/tree_structure.xml」)替換變量時,一切正常:該XML文件是在正確的地方:-)

你能幫我找到什麼是錯的,並使這個$位置變量可見的兩個函數?

感謝

+1

如果您希望將其導入到該函數的作用域中,則必須在函數內聲明它爲'global $ location;'。 – nickb

+0

我會採取面向對象的方法來處理這種情況。像這裏http://stackoverflow.com/questions/2483675/in-php-how-to-call-a-variable-inside-one-function-that-was-defined-previously – Vector

回答

3

試試這個

function cubicleAvailableSpace() { 
    global $location; 
    openXML($location); 
} 

你聲明的函數外部變量,因此無法讀取裏面。

+0

感謝您的想法,但不知何故全球$位置無法按計劃運行。 實際上,我發現我可以將$ location變量作爲參數傳遞給cubicleAvailableSpace($ location)。解決我的問題。 – Fabien