弱弱的问一下类的调用

#1 azwl

下面的语句是怎么执行的?

$rows=spClass('spModel')->spLinker()->findAll($conditions);

2010-04-28 23:40:23

#2 syber

先包含spModel这个类的文件spModel'.php,然后new这个类,再执行spModel'类的父类spLinker的基类的findAll来查找数据库。

2010-04-29 00:01:20

#3 azwl

你的意思是从左到右的顺序执行的?

spClass('spModel')返回obj1,然后执行obj1的spLinker()方法返回obj2,然后再执行obj2的方法findAll()?

2010-04-29 00:20:50

#4 jake

调用顺序是:
spClass('spModel') -> spLinker() -> findAll($conditions);
然后:
findAll($conditions); 返回 > spLinker 返回 > spClass('spModel')
所以注意函数都是有返回值的。

2010-04-29 09:24:06

#5 azwl

随便说两句啊
1。 spLinker是对方法来判断是否要关联数据表。我觉得根据返回的结果来决定关联数据表是不是更通用点。这样用户在spmodel定义的方法也可以用于关联表了。

2。 spLinker是不是可以丢掉,把功能直接加在spModel中,免得绕一圈再回来。

3.  关于一对一,一对多问题。从spLinker代码看好像只可以定义两个之间的关联,不能多级关联。多级关联(多级主从表)还是蛮实用的。

2010-04-29 10:54:13

#6 jake

1. 需要关联就是 spClass('lib_user')->spLinker()->findAll(),不需要关联就是spClass()->findAll();这是由开发者自行决定的。当然,如果findAll没有结果,那么关联表也不会查找,这是肯定的。
2. spModel是针对单表的,spLinker是关联表,分开是很清晰。
3. spLinker有个多对多。然后一对一和一对多的关联,是不能够支持 一对一对一 这样的关联的。另外,太复杂的查询,speedphp的理念是建议直接使用SQL来进行查找,那会更有效率和更方便。

2010-04-29 12:11:37