Модель Cahining

У меня есть класс в php, который работает с методом chainning, но проблема в том, что я хочу связать методы в определенном порядке.

class Chain { public function foo () { return $this; } public function bar () { return $this; } public function some () { return $this; } } 

Итак, если я использую этот класс, то я могу связать эти методы 9 различными способами (все возможные комбинации из 3-х элементов)

Но что произойдет, если я определю, что some то метод всегда должен быть прикован после foo или bar а не иначе?

 $chain = new Chain(); $chain->foo->bar(); //works; ie: the method some is optional $chain->foo()->bar()->some(); //works $chain->bar()->foo()->some(); //works $chain->some()->bar()->foo(); //throws an exception 

Я думаю, что я могу сделать это, задавая логические значения, например: когда вызывается метод foo или bar , тогда я устанавливаю значение для некоторого var в true , а когда разработчик вызывает some функцию, если этот var является false , тогда выдает исключение, в противном случае разрешено продолжить.

Но мне нужно что-то более элегантное, например, шаблон или встроенное решение.

Есть еще один способ сделать это?

Related of "Модель Cahining"