求解:两次连续使用“->->”这种类的调用如何解释呢?

#1 xiaowuphp

$guestbook = spClass("guestbook");  
$this->results = $guestbook->spPager($this->spArgs('page', 1), 5)->findAll;
$this->pager = $guestbook->spPager()->getPager();  
其中两次连续调用“->->”这种类的调用如何解释呢?
是$guestbook->spPage()的结果再去调用getPage()方法吗?
求解:

2010-11-17 09:55:57

#2 jake

其实和递归的理解差不多,当然,具体实现起来还得有其他的一些细节,粗略可以这样说:
$guestbook->spPager($this->spArgs('page', 1), 5)->findAll();
是先执行$guestbook的spPager()方法,然后这个方法return的对象(这里是spModel的实例)会调用findAll()方法,然后再从右到左地返回。
$guestbook->spPager()->getPager();
也是同理,先通过$guestbook->spPager()来取得pager对象(这里就不是spModel了,而是spPager实例),然后再调用spPager的getPager()方法,然后再从右到左返回。

2010-11-17 10:08:55

#3 xiaowuphp

谢谢斑竹!我还有一个疑问:类spPager和类spModel之间的关系,他们好像不是继承关系,但是在使用类spPager时,也未见使用spClass去实例化,而只是实例化了spModel的继承类,这个地方speedphp是如何处理类spPager的呢?

2010-11-17 10:25:45

#4 jake

spPager,spCache等等四个类,可以说是spModel的辅助增强类,都是通过spModel的__call魔术函数来进行实例化的。在spModel的__call中,实例化辅助类后,会调用辅助类的__input和传递spModel自身实例进去。

2010-11-17 10:35:12