抓着我的脑袋看着这个渲染功能:
public function render($layout, $echo=false)
{
if ($this->_escape)
{
foreach ($this as $n => &$v)
{
if (0) {
} elseif (is_array($v) or is_object($v)) {
$this->htmlspecialchars_recursive($v);
} elseif (is_scalar($v)) {$v=htmlspecialchars($v,ENT_QUOTES,null,false);}
}
}
if ($echo) { $this->insert($layout); return true;
} else { ob_start(); $this->insert($layout); return ob_get_clean(); }
}
我理解&符号意味着我们正在修改我们正在迭代的集合(在这种情况下是关联数组?)的内容,但是这个if (0)
业务有什么用呢?
这里有一些隐式迭代的东西,这在PHP中被称为什么?
答案 0 :(得分:2)
它被称为"这个重构是不完整的"。
如果使用了案例,似乎最初有3个案例,而第一个案件已不再有效。作者不是仅仅删除它,而是将其更改为if(0)
,它将始终评估为false。
正确的方法是将其修改为
if (is_array($v) or is_object($v)) {
$this->htmlspecialchars_recursive($v);
}
elseif (is_scalar($v)) {
$v=htmlspecialchars($v,ENT_QUOTES,null,false);
}
foreach
中的&符号是参考符号。 $this
是一个对象,$n
将是属性名称,$v
将是属性值。如果没有&
,您将获得属性值的副本。使用&
,您将获得对该属性的引用,即:您正在更改实际属性值。