PHP 方法链 - 反射?

标签 php reflection properties methods method-chaining

是否有可能反射(reflection)一连串的方法调用以确定您在调用链中的哪个位置? 至少,是否可以辨别一个方法是否是链中的最后一个调用?

$instance->method1()->method2()->method3()->method4()

是否可以使用返回对象实例的属性来做同样的事情?

$instances->property1->property2->property3->property4

最佳答案

如果您调用的所有方法都返回相同对象来创建流畅的界面(而不是将不同的对象链接在一起),那么在对象本身。

例如:

class Eg {
    protected $_callStack = array();

    public function f1()
    {
        $this->_callStack[] = __METHOD__;
        // other work
    }

    public function f2()
    {
        $this->_callStack[] = __METHOD__;
        // other work
    }

    public function getCallStack()
    {
        return $this->_callStack;
    }
}

然后像这样链接调用

$a = new Eg;
$a->f1()->f2()->f1();

会保留如下调用堆栈: array('f1', 'f2', 'f1');

关于PHP 方法链 - 反射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1178487/

相关文章:

java - 如何在java中排队并调用实际方法(而不是立即评估)?

class - 在 CoffeeScript 中,在类级别声明的实例属性可以引用其定义中的另一个实例属性吗?

c# - Entity Framework - 填充属性后运行函数

c# - 序列化时出现 InvalidOperationException

JSON Unmarshal 不适用于 relect 创建的动态结构

class - VBA 中的动态属性名称

php - 使用 Android 将 Http 发布到服务器 json

php - 使用 PHP 类 ZipArchive 创建一个 zip 文件而不将文件写入磁盘?

php - 在 Ubuntu 上安装 Composer 后无法包含 "vendor/autoload.php"

php - 用于 PHP 函数的 Eclipse PDT Intellisense