2014-07-22 35 views
-3

我正在使用$debug變量來控制我正在測試的函數中的打印語句。儘管$debug在與函數相同的範圍級別聲明並初始化爲true,但它在函數內被視爲false(或undefined,我猜)。我對PHP中變量作用域的理解錯誤嗎?我該如何解決?應該在範圍內的變量不是

我的實際代碼要複雜得多,但下面是一個展示相同問題的最小例子。對於它的價值,我使用Mac OS X 10.9.4上的PHP 5.4.24命令行來運行它。

<?php 

$debug = true; 

function myFunction() 
{ 

    if($debug) { 
     echo "I'm debugging"; 
    } else { 
     echo "I'm not debugging"; 
    } 
} 

myFunction(); 

?> 

對我來說這個功能顯示「我沒有調試」。

+2

這是* *基本範圍在這裏。 '$ debug'不在*範圍內。你爲什麼認爲這是? –

+0

@JohnConde它與函數本身處於同一級別。那不在範圍內? –

+2

這不是JavaScript。在函數之外聲明的變量超出範圍。 [文檔](http://php.net/manual/en/language.variables.scope.php)。 –

回答

1

請只需使用下面的代碼:

<?php 

    $debug = true; 

    function myFunction($debug) 
    { 

     if($debug) { 
      echo "I'm debugging"; 
     } else { 
      echo "I'm not debugging"; 
     } 
    } 

    myFunction($debug); 

    ?> 

的功能需要參數「$調試」與它合作。歡迎來到php! :)

+0

實際功能'myFunction'有更多的參數,我不想要將'$ debug'添加到列表中。全球解決方案就是我所需要的。 (還是)感謝你的建議。 –

+0

然後寫一個getter/setter爲此..我知道這個問題,這是最簡單的方法來解決它.. – Tyralcori

+0

我結束了使用全球,但我認爲傳遞它作爲參數的解決方案是最好的一個(最佳做法),所以我接受了你的答案。 –

0

$ debug = true;是的範圍之外,試試這個來代替:

<?php 



function myFunction() 
{ 

    $debug = true; 

    if($debug) { 
     echo "I'm debugging"; 
    } else { 
     echo "I'm not debugging"; 
    } 
} 

myFunction(); 

?> 

你也可以使用global

+0

至少,他的案件已經有一個全球範圍.. – Tyralcori

+0

@Tyralcori他沒有在他的例子中使用全局,我不知道你在說什麼。這取決於他想做什麼。他也可以在函數參數中傳遞變量。 – user3849925