php方法链接,获取链中的下一个方法/参数

php方法链接,获取链中的下一个方法/参数,php,oop,chaining,Php,Oop,Chaining,我正在寻找一种方法来找出PHP OOP链中的下一个方法。 因此,如果我调用$obj->a()->b()或$obj->a->b 我希望a()/a知道下一个链参数/方法是b/b() 我玩过uuuu get和uuuu call,但没有结果 你对此有什么想法吗 我有很多库扩展了相同的父对象(db模型)。 目前我正在使用$db->modelA->getX() 我希望可以选择调用$db->cache->modelA->getX(),cache方法将调用链中的下一个方法,获取结果并将其保存到cache,下次它

我正在寻找一种方法来找出PHP OOP链中的下一个方法。
因此,如果我调用$obj->a()->b()或$obj->a->b
我希望
a()/a
知道下一个链参数/方法是
b/b()

我玩过uuuu get和uuuu call,但没有结果

你对此有什么想法吗


我有很多库扩展了相同的父对象(db模型)。
目前我正在使用
$db->modelA->getX()


我希望可以选择调用
$db->cache->modelA->getX()
,cache方法将调用链中的下一个方法,获取结果并将其保存到cache,下次它将立即从cache中获取它

您的用例是什么?您正在寻找的概念并不存在,因为这些只是按顺序进行的一系列方法调用。只有调用者知道方法的执行顺序,因此您可能需要执行类似
$obj->a('b')->b('c')-c()
的操作,以提示方法下一个要调用的方法。如果方法调用的顺序非常重要,那么您还可以构建一个包装函数,让您按照所需的顺序调用函数,如
$obj->wrapper(['a','b','c')我猜你只是有一个糟糕的类设计。我有很多扩展父类(db模型)的库。目前我正在使用
$db->modelA->getX()
我希望可以选择调用
$db->cache->modelA->getX()
,cache方法将调用链中的下一个方法,获取结果并将其保存到cache。那么为什么方法链不是
$db->modelA->getX()->cache()
?或者更好的是,您可以让所有模型的get方法只调用一个缓存类,该类处理缓存行为(使用回退DB read和cache write从缓存中获取)?因为这样我就必须运行所有模型方法并添加
return$this
,而不是返回结果,以支持链缓存。此外,如果缓存方法将在最后一次调用,我将无法选择检查缓存中是否有结果。从调用方的角度来看,您应该争取的实际上只是
$db->modelA-getX()
,而调用方不知道数据是直接来自db还是来自缓存,根本不需要专门调用缓存行为。