对象中的唯一值

时间:2016-07-13 11:43:36

标签: php arrays oop object

我有一个URI对象,我将其用于自构建PHP路由器。该对象包含patternparameters变量。

  • 模式变量用于保存URI的实际模式,只有一个字符串。
  • 参数变量用于保存一个URI中包含的参数的类型,名称和值。这是一个关联数组。

该类本身看起来像这样(基本):

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时进行故障排除时,我想添加以下功能:

  • 您无法在同一路线中添加相同的URI模式,只会删除URI
  • URI模式不能与所有其他路由上的另一个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);

});

有没有更好的方法呢?

0 个答案:

没有答案