非常奇怪的错误与for循环PHP

时间:2012-08-14 13:37:58

标签: php loops for-loop scope

所以这个bug对我来说似乎很奇怪。我有一个带有两个必需参数的方法,但是当脚本进入第一个for循环时,两个参数中的一个似乎不再存在。

这是代码的一大块:

public function getOptionsForParameters($params, $product){
    // here the value of $product is 105
    for($i = 0; $i<count($params); $i++){
        // but here, $product no longer exists, so in the SQL query, it is empty

        $sql = "SELECT *
                FROM [table_name]
                WHERE prm_id = ".(int)$params[$i]['prm_id']."
                  AND prd_id = ".(int)$product."
                  AND opt_status = 'active'";
    } 
// ... 
}

我真的不明白为什么,因为在方法的开头和for循环之间绝对没有脚本。

另外,如果我在所有for循环之后打印变量,就在方法的“返回”之前,它的值是105 ......在我看来PHP以某种方式为我的变量提供了一个范围,这很奇怪..

我已经在这方面挣扎太久了,我还没有在谷歌或PHP.net上发现任何与此有关的内容

有人知道为什么我的脚本会这样做吗?

BTW:我的PHP版本是5.3.10

非常感谢

2 个答案:

答案 0 :(得分:1)

不应该发生。你100%肯定它已经消失了吗?什么是($产品)给你的东西?

以下代码有何作用?

public function getOptionsForParameters($params, $product){
    var_dump($product);
    for($i=0; $i<4; $i++){
        var_dump(isset($product));
    }
}

如果仍然导致外部函数中的set $ product和内部循环中的unset $ product,那么PHP本身就会出现问题,这可能是一些错误......

另一方面说明:

$i<count($params);
你的for循环语句中的

是低效的,因为它执行每次迭代的计数($ params)。更好地计算一次并使用该计算值

$count = count($params);
$i<$count

答案 1 :(得分:0)

根据正常的数组声明,你试过了吗?

WHERE prm_id = ".(int)$params['prm_id'][$i]."

因为它似乎是declare an array的正常方式,至少根据我提出的关于数组声明语法的问题?