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 相关文章推荐
解析argc argv在php中的应用
Jun 24 PHP
php实现获取及设置用户访问页面语言类
Sep 24 PHP
PHP结合jQuery实现找回密码
Jul 22 PHP
使用phpstorm和xdebug实现远程调试的方法
Dec 29 PHP
php制作的简单验证码识别代码
Jan 26 PHP
Yii2搭建后台并实现rbac权限控制完整实例教程
Apr 28 PHP
PHP正则表达式过滤html标签属性(DEMO)
May 04 PHP
PHP数组实例详解
Jun 26 PHP
PHP实现的数独求解问题示例
Apr 18 PHP
Laravel中的Auth模块详解
Aug 17 PHP
php实现的三个常用加密解密功能函数示例
Nov 06 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
Nov 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 第三节 变量介绍
2012/04/28 PHP
php网站地图生成类示例
2014/01/13 PHP
PHP面向对象程序设计之命名空间与自动加载类详解
2016/12/02 PHP
各种常用浏览器getBoundingClientRect的解析
2009/05/21 Javascript
js显示时间 js显示最后修改时间
2013/01/02 Javascript
调整小数的格式保留小数点后两位
2014/05/14 Javascript
jQuery实现的登录浮动框效果代码
2015/09/26 Javascript
详解JavaScript基本类型和引用类型
2015/12/09 Javascript
jQuery解决浏览器兼容性问题案例分析
2016/04/15 Javascript
Nodejs Stream 数据流使用手册
2016/04/17 NodeJs
jQuery模拟Marquee实现无缝滚动效果完整实例
2016/09/29 Javascript
微信小程序 template模板详解及实例代码
2017/03/09 Javascript
兼容浏览器的js事件绑定函数(详解)
2017/05/09 Javascript
详解ES6之用let声明变量以及let loop机制
2017/07/15 Javascript
JS限制输入框输入的实现代码
2018/07/02 Javascript
取消Bootstrap的dropdown-menu点击默认关闭事件方法
2018/08/10 Javascript
基于Vue 2.0 监听文本框内容变化及ref的使用说明介绍
2018/08/24 Javascript
浅谈js中的bind
2019/03/18 Javascript
ligerUI的ligerDialog关闭刷新的方法
2019/09/27 Javascript
javascript随机变色实例代码
2019/10/15 Javascript
Node.js path模块,获取文件后缀名操作
2020/11/07 Javascript
matplotlib.pyplot画图 图片的二进制流的获取方法
2018/05/24 Python
pyqt5 从本地选择图片 并显示在label上的实例
2019/06/13 Python
使用Python+selenium实现第一个自动化测试脚本
2020/03/17 Python
tensorflow安装成功import tensorflow 出现问题
2020/04/16 Python
Python Django搭建网站流程图解
2020/06/13 Python
使用SimpleITK读取和保存NIfTI/DICOM文件实例
2020/07/01 Python
利用python如何实现猫捉老鼠小游戏
2020/12/04 Python
西班牙品牌鞋子、服装和配饰在线商店:Esdemarca
2021/02/17 全球购物
初一学生评语大全
2014/04/24 职场文书
煤矿安全协议书
2014/08/20 职场文书
解除劳动合同协议书
2014/09/17 职场文书
2014县委书记四风对照检查材料思想汇报
2014/09/21 职场文书
2014学校领导四风对照检查材料思想汇报
2014/09/23 职场文书
2014年计生工作总结
2014/11/21 职场文书
后勤个人工作总结
2015/02/28 职场文书