2015-09-16 4 views
3

Мне нужен способ иметь панировочные сухари, которые не генерируются из URL-адреса.PHP - Цепочка методов - лучший подход?

Мой мыслительный процесс должен иметь класс, «Breadcrumbs», который будет работать как:

$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); 
    } 
} 

Это, однако, не дает точного результата, и получить «неожиданный„->“» при попытке сделать структуру, как я планирую сделать.

Любые идеи, в которых я ошибаюсь?

ответ

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 
    
+2

+1. Но обратите внимание, что точка 2 (разыменование объектов) требует PHP 5.4 или выше. Вы действительно должны использовать 5.4+ в любом случае, но в случае, если вы этого не сделали, это еще одна хорошая причина для обновления. – Simba

1

Необходимо вернуть $this из crumb для того чтобы сделать метод цепочки.

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

Я попытался это: HTTP : //ideone.com/UKahDl По-прежнему получает ту же ошибку? – Phorce

Смежные вопросы