我需要一种方法来让面包屑不是从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);
}
}
然而,这并不能提供准确的结果,并且在尝试按我计划的方式执行该结构时得到'unexpected '-> "。
有什么想法我是错的吗?
-
要进行方法链接,需要从方法调用中返回一个对象。通常您需要:
return $this; // in function crumb()
-
实例化对象并立即调用其方法的正确语法是:
(new BreadCrumb('<<'))->crumb(..)
注意:你不需要在构造函数中初始化你的数组,你可以在声明数组的时候初始化数组:
旁白:这是相当低效的:
.. = array($uri => $name)
您将很难将
$uri
键从数组中取出,这使您的代码不必要地复杂。您应该简单地执行:$this->breadcrumbs[$uri] = $name;
或者,如果您的uri不能保证惟一,则使用以后更容易处理的结构:
$this->breadcrumbs[] = array($uri, $name); // $arr[0] is the URI, $arr[1] the name
public $breadcrumbs = array();
您需要从crumb
返回$this
才能进行方法链接。
public function crumb($uri, $name)
{
$this->breadcrumbs[] = array($uri => $name);
return $this;
}