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

标签 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);

我如何知道方法的最后一次调用是否实际上是最后一次?

最佳答案

当一个函数被调用时,它始终是对该函数的最后一次调用。 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);

关于PHP链式方法,如何知道哪一个是最后一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29706690/

相关文章:

PHP STMT MySQL 查询在设置为等于时返回 LIKE 结果

rest - TJSON.JsonToObject 不通过 setter

c# - 如何从远程类调用未引用的方法? (允许 C# 和 VB.NET)

c# - 向任何 TextReader 添加功能

rxjs - RxJS v5+ 中的 `Observable.transduce` 发生了什么?

java - 调试流畅风格代码时,如何找到哪个链式方法失败?

c++ - 方法链的缩进

php - 如何将mysql语句中的变量设置为下拉列表中的用户选择

php - drupal (CMS) 或 codeigniter (MVC) 用于创建新的 Web 应用程序?

php - 无法更新mysql数据库