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 Undefined index和Undefined variable的解决方法
Mar 27 PHP
PHP中“简单工厂模式”实例代码讲解
Sep 04 PHP
PHP调用C#开发的dll类库方法
Jul 28 PHP
PHP中使用GD库创建圆形饼图的例子
Nov 19 PHP
php在线解压ZIP文件的方法
Dec 30 PHP
php给图片添加文字水印方法汇总
Aug 27 PHP
mysql_escape_string()函数用法分析
Apr 25 PHP
基于ThinkPHP实现的日历功能实例详解
Apr 15 PHP
Laravel5.1 框架控制器基础用法实例分析
Jan 04 PHP
laravel通用化的CURD的实现
Dec 13 PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
Feb 27 PHP
TP5框架实现的数据库备份功能示例
Apr 05 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
Discuz 模板语句分析及知识技巧
2009/08/21 PHP
PHP 伪静态隐藏传递参数名的四种方法
2010/02/22 PHP
php设计模式之命令模式的应用详解
2013/05/21 PHP
PHP实现在数据库百万条数据中随机获取20条记录的方法
2017/04/19 PHP
PHP获取ttf格式文件字体名的方法示例
2019/03/06 PHP
php命名空间设计思想、用法与缺点分析
2019/07/17 PHP
一些常用弹出窗口/拖放/异步文件上传等实用代码
2013/01/06 Javascript
实用的JS正则表达式(手机号码/IP正则/邮编正则/电话等)
2013/01/11 Javascript
JQuery中关于jquery.js与jquery.min.js的比较探讨
2013/05/15 Javascript
手写的一个兼容各种浏览器的javascript getStyle函数(获取元素的样式)
2014/06/06 Javascript
jQuery子属性过滤选择器用法分析
2015/02/10 Javascript
Angular 根据 service 的状态更新 directive
2016/04/03 Javascript
jquery实现点击弹出可放大居中及关闭的对话框(附demo源码下载)
2016/05/10 Javascript
AngularJS实现标签页的两种方式
2016/09/05 Javascript
详解JS数组Reduce()方法详解及高级技巧
2017/08/18 Javascript
ES6使用export和import实现模块化的方法
2018/09/10 Javascript
eslint 的三大通用规则详解
2019/05/16 Javascript
Vue列表如何实现滚动到指定位置样式改变效果
2020/05/09 Javascript
JS实现公告上线滚动效果
2021/01/10 Javascript
Python内置数据类型详解
2014/08/18 Python
python实现通过代理服务器访问远程url的方法
2015/04/29 Python
Fabric 应用案例
2016/08/28 Python
Python使用struct处理二进制的实例详解
2017/09/11 Python
对Python 数组的切片操作详解
2018/07/02 Python
flask 框架操作MySQL数据库简单示例
2020/02/02 Python
Python3合并两个有序数组代码实例
2020/08/11 Python
css3动画过渡实现鼠标跟随导航效果
2018/02/08 HTML / CSS
指针和引用有什么区别
2013/01/13 面试题
中间件分为哪几类
2016/09/18 面试题
门卫人员岗位职责
2013/12/24 职场文书
广告业务员岗位职责
2014/02/06 职场文书
经贸日语专业自荐信
2014/09/02 职场文书
2016年秋季新学期致辞
2015/07/30 职场文书
python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析
2021/04/14 Python
golang 接口嵌套实现复用的操作
2021/04/29 Golang
Python 中面向接口编程
2022/05/20 Python