我需要一种方法来获取不是从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;在尝试按照我计划的方式进行结构时。
我出错的地方有什么想法吗?
答案 0 :(得分:5)
要进行方法链接,您需要从方法调用中返回一个对象。通常你会想要:
return $this; // in function crumb()
实例化对象并立即调用方法的正确语法是:
(new BreadCrumb('<<'))->crumb(..)
如果没有额外的括号,PHP对你想要做的事情不明确。
除此之外:您不需要在构造函数中初始化数组,您可以在声明数组时执行此操作:
public $breadcrumbs = array();
除此之外:效率非常低:
.. = 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;
}