Home  >  Article  >  Backend Development  >  typecho - php $db->select()->from()->where();

typecho - php $db->select()->from()->where();

WBOY
WBOYOriginal
2016-06-06 20:37:501069browse

一个对象,方法后调用方法

过程是怎么执行的,是先返回第一个方法select()的东西,再执行第二个方法from(),再执行后面的方法吗?

回复内容:

一个对象,方法后调用方法

过程是怎么执行的,是先返回第一个方法select()的东西,再执行第二个方法from(),再执行后面的方法吗?

其实很简单啊,方法都是对一个对象属性做操作,最后都返回本身就可以用这种链式方法的说。一个简单的例子大概是这样的:

<code><?php // http://3v4l.org/V3VuZ
class database {
    public $sql = "";
    public function select( $str = "" ) {
        $this->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");
</code>

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/

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn