Agile Toolkit использует этот подход везде.Он использует обертку метода add (), которая определена для предка глобального объекта.Вот некоторый реальный код:
$page
->add('CRUD')
->setModel('User')
->setMasterField('admin',false);
Этот код создает представление 'CRUD', помещает его на страницу, создает и связывает с экземпляром класса Model_User, который получает дополнительное условие и значение по умолчанию для логического значения 'admin'field.
На странице будет отображаться элемент управления CRUD с возможностью добавления / редактирования / удаления, позволяющий редактировать всех пользователей, кроме администраторов.
Вот код для описания концепции:
class AbstractObject {
public $owner;
function add($class){
$c=new $class;
$c->owner=$this;
return $c;
}
}
class Form extends AbstractObject {
function dosomething(){
return $this;
}
}
class OtherForm extends Form {}
$object->add('Form')->dosomething()->owner
->add('OtherForm'); // etc
Я думаю, что это удивительный и очень практичный подход.
ps Я должен отметить новый синтаксис исключений:
throw $this->exception('Something went bad');
с использованием $ this связывает исключение с объектом, который виноват, который также может установить класс по умолчанию для исключения.