在PHP foreach循环之外访问变量

| 在我正在处理的某些代码中,我注意到正在从“ 0”循环外部访问多个变量。 这可以在此特定应用程序的codeigniter视图文件中看到。 例如,一个视图文件:
<?php
foreach ($items as $row):
endforeach;

// HTML / PHP code...

 <td>
     <?php echo form_checkbox(\'option_1\',\'1\', FALSE); ?>
     <?php echo form_hidden(\'weight_unit\', $row->weight_unit); ?>
 </td>
// etc...
这行得通(即没有错误),但我想知道这是否会被视为不良做法? (范围等) 有人对此有意见吗,应该只在相应的循环内调用变量吗? 我注意到的另一个问题是视图文件的多个部分是否需要变量:我应该重构为具有多个循环,还是应该有单个
foreach / endforeach
以及文件的开始/结尾。 任何建议,不胜感激。谢谢。     
已邀请:
        当到达其他代码时,3ѭ将是数组中的最后一项,或者未设置。 那是你想要的吗?如果是这样,那么它本身就不是一个坏习惯。但是您至少应该记录该行为是故意的,因为它不直观。 更好的做法是:
foreach ($foo as $bar) 
{
  // do something
}
$last_bar = isset($bar) ? $bar : null;
显然,您的意思是用5英镑做点什么。   我注意到的另一个问题是,视图文件的多个部分是否需要变量 如果您必须在视图的不同位置遍历循环,则可以。 但是,如果您只需要在某个数组内深入某些信息,则应将其粘贴到一个易于访问的变量中,然后使用它。     
        我能想到的唯一原因是查找数组的末尾,以便可以将其最后一个成员存储在变量中。 您可以用
end()
使其更清晰。
$row = end($items);
    
        这是一个坏习惯。如果记录集的长度超过一项,那么您将遍历所有记录(即使您在循环中什么也不做),然后仅使用最后一条记录。我不使用CI,但是如果这是一个记录集对象,则应该以某种方式访问​​RS中的第一个/最后一个记录或任何其他索引位置。如果要在特定记录后使用,则应使用它们。如果它只是一个数组,则可以使用
array_pop
(如果不需要保持阵列完整),或使用
end
(如果需要)。 此外,如果记录集的长度发生更改,那么在一个较长的集的上下文中,如果它不是最后一个记录,那么这可能会导致无法预料的后果。     
        我会说这确实是一种不好的做法-如果稍后(几周后)遇到相同的代码,并且在实际的ѭ0和表之间完全不同的记录类型上又需要另一个
foreach
,会发生什么情况? -您的
$row
变量将具有完全不同的含义-当添加更多代码时,这段代码非常容易受到副作用的影响。 另外,很有可能将来PHP不再支持此行为(这只是我的假设,因为正如您提到的那样,$ row变量超出了您使用它的范围)。 作为一些一般原则: 使用尽可能少的全局变量-很难跟踪,维护和确保正确的值 尽可能减小变量的范围,并仅在非常明确的范围内使用它们 避免使用其他语言完全不自然的边际用例和所谓的功能 最后但并非最不重要的一点是,如果很难编写代码,则应该避免阅读该原则,而应该很难阅读-该原则不会确保您的工作,只是您同事的仇恨     

要回复问题请先登录注册