虽然循环在制作函数时不起作用

时间:2014-09-23 00:17:32

标签: php function while-loop

我可以做到这一点:

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 个答案:

答案 0 :(得分:1)

所以这可能是范围问题。尝试在while循环之前回显$row作为单个查询。我可以想象你仍然看不到任何东西。我的猜测是test2函数不包含没有涉及函数时的正确数据库信息。

$result来自哪里?

该函数没有显示$result等于

的内容

来自wiki的范围定义:
在计算机编程中,名称绑定的范围 - 名称与实体的关联(例如变量)是绑定有效的计算机程序的一部分:其中名称可用于引用实体。

换句话说,当你有一个功能时

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

 foo(){
    $test = 1;
 }

这是因为内部$test对外部$ test一无所知。 除非将变量声明为global variable(这是一个变量) 可以被所有功能理解)。但如果没有这样宣布,那么这个功能在某种意义上就不会对外界的“世界”产生任何影响。

您还可以将变量作为参数传入,函数应在scope

中包含这些结果

你能做的是:

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

现在该函数的scope包含$result$db,因此您可以在函数中使用它们

答案 1 :(得分:1)

我唯一能想到的是在调用函数之前未定义结果变量。您也可以尝试将其作为test2函数中的参数传递。像:

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