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方法相同?
答案 0 :(得分:1)
在作业之前是否未设置?
它可以。如果$this->routes[$name]
是PHP参考,并且您不使用unset
,则指向基础值的所有符号都将指向新值。如果您之前使用unset
,则分配只会影响使用的符号。
第二个问题:为什么在remove方法中将简单字符串解析为数组?
这只是一个小技巧,允许您对字符串和数组使用remove
方法。将字符串(例如'abc'
)强制转换为数组时,PHP将返回一个包含字符串作为其唯一值(array(0 => 'abc')
)的数组。对于字符串,该方法按照您的建议工作,对于数组,它将取消设置数组中的所有名称。