oop — метод цепочек PHP, как узнать, какой из них последний

Ситуация:

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 на самом деле последний?

2

Решение

Когда функция вызывается, она в этот момент ВСЕГДА является последним вызовом этой функции. 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);
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]