在作业之前是否未设置?

时间:2018-01-28 19:24:55

标签: php symfony

class RouteCollection implements \IteratorAggregate, \Countable
{
    /**
     * @var Route[]
     */
    private $routes = array();

    public function add($name, Route $route)
    {
        unset($this->routes[$name]);

        $this->routes[$name] = $route;
    }

     public function remove($name)
     {
        foreach ((array) $name as $n) {
            unset($this->routes[$n]);
        }
     }
}

这是来自班级Symfony\Component\Routing\RouteCollection的一段代码。在作业之前是否未设置?

为什么要这样做?

第二个问题:为什么在remove方法中简单的字符串被解析为数组?

为什么我不能简单地使用:

unset($this->routes[$name]);

与add方法相同?

1 个答案:

答案 0 :(得分:1)

在作业之前是否未设置?

它可以。如果$this->routes[$name]是PHP参考,并且您不使用unset,则指向基础值的所有符号都将指向新值。如果您之前使用unset,则分配只会影响使用的符号。

第二个问题:为什么在remove方法中将简单字符串解析为数组?

这只是一个小技巧,允许您对字符串和数组使用remove方法。将字符串(例如'abc')强制转换为数组时,PHP将返回一个包含字符串作为其唯一值(array(0 => 'abc'))的数组。对于字符串,该方法按照您的建议工作,对于数组,它将取消设置数组中的所有名称。