是否可以反思方法的调用链,以确定你是在调用链有什么意义呢? 最起码,是可以辨别的方法是在链中的最后一次通话?
$instance->method1()->method2()->method3()->method4()
是否有可能做其使用性能相同返回对象的实例?
$instances->property1->property2->property3->property4
是否可以反思方法的调用链,以确定你是在调用链有什么意义呢? 最起码,是可以辨别的方法是在链中的最后一次通话?
$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();
将离开像调用堆栈:阵列( 'F1', 'F2', 'F1');
debug_backtrace()是不会对使用的“流利接口”(为“链”中所示的正确名称)是正确的,因为每一个方法返回,下一个被调用之前。
对于链接的方法,你可以使用PHP5的重载方法 (在这种情况下__call)。
我看不出有任何理由,你为什么会想跟踪链接的属性,但如果你坚持这样的话,你可以使用__get上你的类重载方法来添加所需的功能。
请让我知道,如果你不能弄清楚如何使用上述建议。
$instances->property1->property2->property3->property4->method();
要么
$instances->property1->property2->property3->property4=some_value
至于第一个问题:没有加入一些代码来跟踪你在哪里链。
我不认为有对知道一个类时,它的最后一个方法调用被做了可行的途径。 我认为你需要某种形式的 - >执行(); 在链的末端的函数调用。
另外,在我看来,让这样的功能很可能使代码过于神奇和惊喜的用户和/或有马车症状。