首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP如何防止foreach覆盖外部变量

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

Stack Overflow用户
提问于 2018-12-03 15:08:01
回答 1查看 73关注 0票数 0

目前,我正试图尽可能多地清理我所在公司网站的代码,而不需要完全重写(比如删除诸如// declare variables这样的愚蠢评论、干净变量命名、一致性等等)。代码是一个巨大的混乱和可怕,使用了大量的文件,其中包括和变量被使用之间的文件,这使它真的很烦人。

问题是,一个简单的事情,如重命名一个变量,实际上可以打破很多。我目前有以下问题:

在文件a中,我有一个查询,如下所示:

代码语言:javascript
运行
复制
$getProductSql = 'QUERY';
$getProduct = $db->prepare($getProductSql);
// some bind values etc.
$getProduct->execute();
$product = $getProduct->fetch(PDO::FETCH_ASSOC);

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

代码语言:javascript
运行
复制
$getProductsSql = 'QUERY';
$getProducts = $db->prepare($getProductsSql);
// some bind values etc.
$getProducts->execute();

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

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

代码语言:javascript
运行
复制
if ($product['COLUMN'] === '1')

在文件c中,应该使用文件a中的$product变量,但是由于我们的结构和文件b之间包含的方式,a文件中的$product被替换为b文件中循环中$product的最后一个值。

有没有任何方法来解决这个不使用使用两个不同的变量名称或移动代码?

EN

回答 1

Stack Overflow用户

发布于 2018-12-03 15:25:44

就像欺骗说的:没有真正的..。但你可以这么做:

保留文件a的原样。

更改文件b如下:

代码语言:javascript
运行
复制
$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如下:

代码语言:javascript
运行
复制
if ($product[0]['COLUMN'] === '1')

这有点让人困惑,也不太好。是的,这就是为什么你应该使用函数.

或者:如果不再需要文件c中的b文件中的产品数组,也可以这样做:

B档案:

代码语言:javascript
运行
复制
$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。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53596474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档