你在PHP中称这种隐式循环语法是什么?

时间:2018-03-20 04:05:02

标签: php

抓着我的脑袋看着这个渲染功能:

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中被称为什么?

1 个答案:

答案 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将是属性值。如果没有&,您将获得属性值的副本。使用&,您将获得对该属性的引用,即:您正在更改实际属性值。