typecho - php $db->select()->from()->where();
过程是怎么执行的,是先返回第一个方法select()的东西,再执行第二个方法from(),再执行后面的方法吗?
回复内容:
一个对象,方法后调用方法
过程是怎么执行的,是先返回第一个方法select()的东西,再执行第二个方法from(),再执行后面的方法吗?
其实很简单啊,方法都是对一个对象属性做操作,最后都返回本身就可以用这种链式方法的说。一个简单的例子大概是这样的:
sql .= $str;
return $this;
}
public function from( $str = "" ) {
$this->sql .= $str;
return $this;
}
public function __toString() {
return $this->sql;
}
}
$db = new database();
echo $db->select("abc")->from("def");
https://github.com/typecho/typecho/blob/master/var/Typecho/Db/Query.php#L423
看看这个自然就明白了
你应该说的是链式操作吧,题目里写的语句,只是单纯的构造查询语句而已,还要执行 $db->query()
才有结果集,类似这样 $db->query($db->select()->from()->where())
。上面的构造语句里,每个方法里,都返回对象本身 return $this
,所以又可以接着执行接在后面的方法。
其实就是返回了当前操作的对象,$this
,这样一来就可以实现链式操作了!
@公子 的例子很形象,说白了就是函数不断返回自己的引用,然后函数不断对自己的成员做操作。
如果对于链式操作有疑惑,可以看看这个,关于db的api介绍 http://www.typechodev.com/index.php/archives/17/
推荐阅读
-
UCenter info: MySQL Query Error SQL:SELECT value FROM [Table]vars WHERE noteexis
-
UCenter info: MySQL Query Error SQL:SELECT value FROM [Table]vars WHERE noteexis
-
UCenter info: MySQL Query Error SQL:SELECT value FROM [Table]vars WHERE noteexists
-
mysql解决select * from 表名 (where + 约束条件为空)
-
select * from tt t where t.`name` like '%'该字段不为空-一般不这样写啊
-
UCenter info: MySQL Query Error SQL:SELECT value FROM [Table]vars WHERE noteexis
-
SELECT字段FROM表WHERE某字段Like条件
-
求前辈帮助 php调用数据库,select where中怎么给变量加通配符%
-
CI框架中数据库操作函数$this->db->where()相关用法总结_php实例
-
php 查询语句select count(*) from 表 where type='文艺生活'如何输出结果