PHP链式方法,如何知道最后一个

时间:2015-04-17 18:20:42

标签: php oop method-chaining method-call

情况:

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的最后一次电话是否真的是最后一次?

1 个答案:

答案 0 :(得分:3)

当一个函数被调用时,它就是那个时刻总是最后一次调用该函数。 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);