typecho - php $db->select()->from()->where();
阿神
阿神 2017-04-10 15:23:00
[PHP讨论组]

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

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

阿神
阿神

闭关修行中......

全部回复(5)
高洛峰

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

<?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");
怪我咯

https://github.com/typecho/typecho/blob/master/var/Typecho/Db/Query.php#L423
看看这个自然就明白了

天蓬老师

你应该说的是链式操作吧,题目里写的语句,只是单纯的构造查询语句而已,还要执行 $db->query() 才有结果集,类似这样 $db->query($db->select()->from()->where())。上面的构造语句里,每个方法里,都返回对象本身 return $this,所以又可以接着执行接在后面的方法。

PHP中文网

其实就是返回了当前操作的对象,$this,这样一来就可以实现链式操作了!

天蓬老师

@公子 的例子很形象,说白了就是函数不断返回自己的引用,然后函数不断对自己的成员做操作。
如果对于链式操作有疑惑,可以看看这个,关于db的api介绍 http://www.typechodev.com/index.php/archives/17/

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号