PHP 实现链式操作

链式操作就是 $obj->a()->b()->c(); 看起来很高端哦,来看看怎么实现。

Posted in PHP onMarch 09, 2021

php链式操作的关键是在做完操作后要return $this;

一、不使用__call方法实现链式操作

<?php
class Sql{
    private $sql=array("from"=>"",
            "where"=>"",
            "order"=>"",
            "limit"=>"");

    public function from($tableName) {
        $this->sql["from"]="FROM ".$tableName;
        return $this;
    }

    public function where($_where='1=1') {
        $this->sql["where"]="WHERE ".$_where;
        return $this;
    }

    public function order($_order='id DESC') {
        $this->sql["order"]="ORDER BY ".$_order;
        return $this;
    }

    public function limit($_limit='30') {
        $this->sql["limit"]="LIMIT 0,".$_limit;
        return $this;
    }
    public function select($_select='*') {
        return "SELECT ".$_select." ".(implode(" ",$this->sql));
    }
}

$sql =new Sql();

echo $sql->from("testTable")->where("id=1")->order("id DESC")->limit(10)->select();
//输出 SELECT * FROM testTable WHERE id=1 ORDER BY id DESC LIMIT 0,10
?>

 

二、使用__call方法实现链式操作

__call()在对象调用一个不可访问的方法时会被触发,所以可以实现类的动态方法的创建,实现php的方法重载功能,但它其实是一个语法糖(__construct()方法也是)。

<?php
class String
{
    public $value;

    public function __construct($str=null)
    {
        $this->value = $str;
    }

    public function __call($name, $args)
    {
        $this->value = call_user_func($name, $this->value, $args[0]);
        return $this;
    }

    public function strlen()
    {
        return strlen($this->value);
    }
}
$str = new String('01389');
echo $str->trim('0')->strlen();
// 输出结果为 4;trim('0')后$str为"1389"
?>

 

PHP 相关文章推荐
比较简单的百度网盘文件直链PHP代码
Mar 24 PHP
php读取图片内容并输出到浏览器的实现代码
Aug 08 PHP
PHP中使用循环实现的金字塔图形
Nov 08 PHP
PHP多线程类及用法实例
Dec 03 PHP
PHP使用header()输出图片缓存实例
Dec 09 PHP
php跨服务器访问方法小结
May 12 PHP
Yii2 rbac权限控制操作步骤实例教程
Apr 29 PHP
PHP简单判断iPhone、iPad、Android及PC设备的方法
Oct 11 PHP
php实现文件上传及头像预览功能
Jan 15 PHP
ThinkPHP使用getlist方法实现数据搜索功能示例
May 08 PHP
PHP实现求解最长公共子串问题的方法
Nov 17 PHP
PHP receiveMail实现收邮件功能
Apr 25 PHP
PHP中SESSION过期设置
Mar 09 #PHP
PHP 判断字符串是中文还是英文, 或者是中英混合
Mar 09 #PHP
PHP 实现重载
Mar 09 #PHP
PHP 实现缩略图
Mar 09 #PHP
PHP 裁剪图片
Mar 09 #PHP
PHP 使用位运算实现四则运算的代码
Mar 09 #PHP
让你的PHP,APACHE,NGINX支持大文件上传
Mar 09 #PHP
You might like
PHP异常Parse error: syntax error, unexpected T_VAR错误解决方法
2014/05/06 PHP
php rsa加密解密使用详解
2015/01/14 PHP
Thinkphp结合ajaxFileUpload实现异步图片传输示例
2017/03/13 PHP
从ThinkPHP3.2.3过渡到ThinkPHP5.0学习笔记图文详解
2019/04/03 PHP
php libevent 功能与使用方法详解
2020/03/04 PHP
弹出广告特效(一个IP只弹出一次)的代码
2007/07/27 Javascript
JS 分号引起的一段调试问题
2009/06/18 Javascript
JQuery autocomplete 使用手册
2010/04/01 Javascript
JavaScript中去掉数组中的重复值的实现方法
2011/08/03 Javascript
对于this和$(this)的个人理解
2013/09/08 Javascript
JS去掉第一个字符和最后一个字符的实现代码
2014/02/20 Javascript
jQuery网页右侧广告跟随滚动代码分享
2020/04/20 Javascript
jQuery动态生成不规则表格(前后端)
2017/02/21 Javascript
JS实现移动端判断上拉和下滑功能
2017/08/07 Javascript
JavaScript EventEmitter 背后的秘密 完整版
2018/03/29 Javascript
说说如何使用Vuex进行状态管理(小结)
2019/04/14 Javascript
Layui tree 下拉菜单树的实例代码
2019/09/21 Javascript
vue 获取及修改store.js里的公共变量实例
2019/11/06 Javascript
[53:13]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第三场 1月18日
2021/03/11 DOTA
python将人民币转换大写的脚本代码
2013/02/10 Python
MySQLdb ImportError: libmysqlclient.so.18解决方法
2014/08/21 Python
用Python解析XML的几种常见方法的介绍
2015/04/09 Python
使用Python的Tornado框架实现一个简单的WebQQ机器人
2015/04/24 Python
python通过post提交数据的方法
2015/05/06 Python
Python决策树分类算法学习
2017/12/22 Python
Python实现带参数与不带参数的多重继承示例
2018/01/30 Python
Python从列表推导到zip()函数的5种技巧总结
2019/10/23 Python
Python基础之函数基本用法与进阶详解
2020/01/02 Python
PageFactory设计模式基于python实现
2020/04/14 Python
python中的垃圾回收(GC)机制
2020/09/21 Python
Python+Xlwings 删除Excel的行和列
2020/12/19 Python
光电信息专业应届生求职信
2013/10/07 职场文书
飘柔洗发水广告词
2014/03/14 职场文书
项目委托协议书(最新)
2014/09/13 职场文书
2016北大自主招生自荐信模板
2016/01/28 职场文书
pytorch中的 .view()函数的用法介绍
2022/03/17 Python