У меня есть класс в 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
, тогда выдает исключение, в противном случае разрешено продолжить.
Но мне нужно что-то более элегантное, например, шаблон или встроенное решение.
Есть еще один способ сделать это?