我有一个URI
对象,我将其用于自构建PHP路由器。该对象包含pattern
和parameters
变量。
该类本身看起来像这样(基本):
class URI
{
private $pattern;
private $parameters;
public function __construct($pattern)
{
$this->pattern = $pattern;
}
public function getPattern()
{
return $this->pattern;
}
public function setPattern($pattern)
{
$this->pattern = $pattern;
}
public function getParameters()
{
return $this->parameters;
}
public function setParameters($parameters)
{
$this->parameters = $parameters;
}
}
我的路由器上有一条路由,其中可以包含多个URI。
一个例子是,URI" /"和" / home"和" /另一个家庭"所有重定向 到同一页。
其中包含多个这些对象。我选择了一个对象而不是一个数组,因此我在功能设计方面获得了更大的自由,因为我还需要实现这些参数。
在添加URI时进行故障排除时,我想添加以下功能:
当这只是一个数组时,我只需使用array_unique
作为第一个功能就可以轻松完成。对于其他功能,我也只使用标准数组函数。
现在我必须收集URI数组中每个对象的所有getPattern()
,然后检查相同的内容。
我目前通过这种方法做到这一点:
public function resolveRouteURIs(array $URIs)
{
$collection = [];
if (!is_array($URIs)) {
throw new \InvalidArgumentException("The URI's should be in a array");
}
foreach ($URIs as $URI) {
$collection[] = [
'pattern' => $URI->getPattern(),
'parameters' => $URI->getParameters()];
}
return $collection;
}
使用此方法重新设置URI:
//The resolver class
$resolver = new Route\URIs\URI\Resolver();
//Some route URIs as object format
$currentRouteURIs = $resolver->resolveRouteURIs($currentRouteURIs);
$URIs = array_unique($currentRouteURIs, SORT_REGULAR);
array_walk($URIs, function (&$URI) {
$parameters = $URI['parameters'];
$URI = new Route\URIs\URI\URI($URI['pattern']);
$URI->setParameters($parameters);
});
有没有更好的方法呢?