2013-02-27 3 views
1

У меня есть следующий код, но он, похоже, не хочет работать прикованным.Метод метода chaining

$this->view->setData($class_vars); 
$this->view->render('addview'); 

Вышеперечисленные работы и работает нормально, но когда я пытаюсь сделать следующее:

$this->view->setData($class_vars)->render('addview'); 

Я получаю следующее сообщение об ошибке:

Fatal error: Call to a member function render() on a non-object in....

Но странное дело, когда я называю это другой способ:

$this->view->render('addview')->setData($class_vars); 

Он запускается, но мне нужно, чтобы setData запускался первым, так как это устанавливает var для фактического представления, так что, хотя я получаю представление о его ошибках, где должны быть vars? Оба метода являются общедоступными?

Спасибо Вам

ответ

5

setData() ли возвращать объект вида (т.е. он имеет return $this; линии)? Если нет ... ну, это нужно, если вы хотите, чтобы он работал таким образом.

Для дополнительной информации. Этот метод называется «свободным интерфейсом» и описан здесь: http://www.martinfowler.com/bliki/FluentInterface.html

+0

Действительно, цепочки - это не волшебный трюк, чтобы побежать, ваша функция должна вернуть объект, на который вызывается функция. Если это не так, все кончено. В вашем примере 'render()' возвращает представление, но не 'setData()' – MatRt

+1

Просто опубликуйте свой собственный ответ, но вы получили его первым, так что заслуживайте благодарность: setData() i добавил return $ this ; и все в порядке. спасибо, да! –

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