Ситуация:
Class MyClass {
...
public function method($args) {
// code
...
if (is the last call) {
return $something;
}
return $this;
}
...
}
....
$obj = new MyClass;
$obj->method($some_args)->method($something_else)->method($more_data);
Как я могу знать, если последний звонок method
на самом деле последний?
Когда функция вызывается, она в этот момент ВСЕГДА является последним вызовом этой функции. PHP не знает, выполнит ли ваш скрипт другой вызов функции после этого.
При этом вы, вероятно, можете обойтись, используя магическую функцию __destruct, например:
<?php
Class MyClass {
private $method_queue = array();
public function method($args) {
array_push($this->method_queue, $args);
return $this;
}
private function _method($args, $is_last) {
// do actual stuff
echo $args;
if ($is_last) {
echo "LAST";
// do more stuff
}
}
public function __destruct()
{
foreach ($this->method_queue as $k=>$args) {
$this->_method($args, count($this->method_queue)-1==$k);
}
}
}
$obj = new MyClass;
$obj->method(1)->method(2)->method(3);
Других решений пока нет …