PHP如何防止foreach覆盖外部变量

时间:2018-12-03 15:08:01

标签: php foreach block

目前,我正在尝试清理我所工作公司网站的尽可能多的代码,而不必完全重写(诸如删除诸如// declare variables之类的愚蠢注释,清除变量命名,一致性等)。 )。该代码非常混乱且可怕,它使用了很多包含在内的文件,并且在文件之间使用了变量,这实在令人讨厌。

问题是,重命名变量实际上很容易造成很多麻烦。我目前有以下问题:

在文件a中,我有一个查询,看起来像这样:

$getProductSql = 'QUERY';
$getProduct = $db->prepare($getProductSql);
// some bind values etc.
$getProduct->execute();
$product = $getProduct->fetch(PDO::FETCH_ASSOC);

现在,该文件包含在索引中之后,文件b将被包含,其中包含以下内容:

$getProductsSql = 'QUERY';
$getProducts = $db->prepare($getProductsSql);
// some bind values etc.
$getProducts->execute();

foreach ($getProducts->fetchAll(PDO::FETCH_ASSOC) as $product) {
    // some code
}

包含该文件之后,将包含文件c,该文件包含以下内容:

if ($product['COLUMN'] === '1')

在文件c中,应使用文件$product中的a变量,但是由于我们的结构以及文件b被包含在{{1文件$product中的}}替换为文件a中循环中的$product的最后一个值。

有什么办法可以使用两个不同的变量名或移动代码来解决问题?

1 个答案:

答案 0 :(得分:1)

正如deceze所说:确实没有……但是您可以这样做:

按原样保留文件。

像这样更改文件b:

$getProductsSql = 'QUERY';
$getProducts = $db->prepare($getProductsSql);
// some bind values etc.
$getProducts->execute();

$p[] = $product;

foreach ($getProducts->fetchAll(PDO::FETCH_ASSOC) as $product) {
    // some code
    $p[] = $product
}
$product = $p;

文件c如下:

if ($product[0]['COLUMN'] === '1')

这有点令人困惑,而且不是很好。是的,这就是为什么您应该使用函数...

或者:如果您不再需要文件c中的文件b中的产品数组,则也可以简单地执行以下操作:

文件b:

$getProductsSql = 'QUERY';
$getProducts = $db->prepare($getProductsSql);
// some bind values etc.
$getProducts->execute();

$p = $product;

foreach ($getProducts->fetchAll(PDO::FETCH_ASSOC) as $product) {
    // some code
}
$product = $p;

在这种情况下:无需更改文件c