2014-09-23 50 views
0

我可以使這項工作循環不起作用:雖然在製成功能

function test1(){ 
    $count = 1; 
    while($count < 8){ 
     echo "Hello world1 <br>"; 
     $count++; 
    } 
} 
test1(); 

我可以做這項工作:

while($row = mysqli_fetch_array($result)){ 
    echo "Hello world2<br>"; 
} 

但我不能做這項工作:

function test2(){ 
    while($row = mysqli_fetch_array($result)){ 
    echo "Hello world3 <br>"; 
    } 
} 
test2(); 

echo部分是其他內容的佔位符,但爲什麼test2函數不工作?

+2

當某些功能不起作用時,99%的時間是範圍問題。 – 2014-09-23 00:18:58

+0

「示波器問題」的含義是什麼 - 只需再多幾個字就可以了,因此我知道要搜索網絡。 – 2014-09-23 00:23:02

+1

這個=> http://php.net/manual/en/language.variables.scope.php會解釋它。 – 2014-09-23 00:24:07

回答

1

我能想到的唯一的結果變量是在你調用函數之前沒有定義的。您也可以嘗試將它作爲test2函數中的參數傳入。像:

function test2($result){ 
    while($row = mysqli_fetch_array($result)){ 
    echo "Hello world3 <br>"; 
    } 
} 
test2($result); 
+0

工作,歡呼:) – 2014-09-23 00:56:25

1

所以這可能是一個範圍問題。嘗試在while循環之前回顯$row作爲單個查詢。我可以想象你仍然看不到任何東西。我的猜測是,test2函數不包含沒有涉及函數時的正確db數據。

$result從哪裏來?

的功能沒有顯示什麼$result會從維基等於範圍

定義:
在計算機程序設計,將名稱綁定的範圍 - 一個名稱的關聯實體,如變量 - 是綁定有效的計算機程序的一部分:名稱可用於引用實體。

因此,換句話說,當你有一個函數

$test = 10; 
foo(); 
echo $test; // = 10 not 1 

foo(){ 
    $test = 1; 
} 

這是因爲裏面$test一無所知外$測試。 除非變量被聲明爲global variable(這是所有函數都可以理解的變量,即 )。但是,如果它沒有被宣佈爲這樣,那麼這個功能在某種意義上就不會對外界「世界」有所瞭解。

您也可以通過在變量作爲參數傳遞給該函數應包含這些結果在其scope

你可以做的是:

function func($result, $db){ 
    while($row = $db->mysqli_fetch_array($result)){ 
     echo "Hello world3 <br>"; 
    } 
} 

現在功能的scope包含$result$db所以你可以在函數中使用它們