PHP - 方法链接 - 最佳方法?

时间:2015-09-16 08:16:23

标签: php

我需要一种方法来获取不是从URL生成的面包屑。

我的思维过程是有一个班级,"面包屑"这将作为:

$breadcrumbs = new BreadCrumb('<<')->crumb('www.google.com', 'Google')->crumb('www.youtube.com', 'Youtube');

这将生成一个数组,并且每个方法链都将推回到数组中,从而生成一个数组,然后我可以将其转换为URL结构。

我尝试了以下内容:

class Breadcrumbs {

    public $del; 
    public $breadcrumbs;

    public function __construct($del)
    {
        $this->breadcrumbs = array();
        $this->del = $del;  

    }

    public function crumb($uri, $name)
    {
         $this->breadcrumbs[] = array($uri => $name);
    }
}

然而,这并不能提供准确的结果,并且会出现意料之外的&#39;&#39;&#39;&#39;&#39;在尝试按照我计划的方式进行结构时。

我出错的地方有什么想法吗?

2 个答案:

答案 0 :(得分:5)

  1. 要进行方法链接,您需要从方法调用中返回一个对象。通常你会想要:

    return $this;  // in function crumb()
    
  2. 实例化对象并立即调用方法的正确语法是:

    (new BreadCrumb('<<'))->crumb(..)
    

    如果没有额外的括号,PHP对你想要做的事情不明确。

  3. 除此之外:您不需要在构造函数中初始化数组,您可以在声明数组时执行此操作:

    public $breadcrumbs = array();
    
  4. 除此之外:效率非常低:

    .. = array($uri => $name)
    

    您很难将$uri密钥从阵列中取出,这会使您的代码变得不必要地复杂化。你应该这样做:

    $this->breadcrumbs[$uri] = $name;
    

    或者,如果您的URI不能保证唯一,请使用以后更容易使用的结构:

    $this->breadcrumbs[] = array($uri, $name);  // $arr[0] is the URI, $arr[1] the name
    

答案 1 :(得分:1)

您需要从$this返回crumb才能进行方法链接。

public function crumb($uri, $name)
{
     $this->breadcrumbs[] = array($uri => $name);
     return $this;
}