2014-09-23 53 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所以你可以在函数中使用它们