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 相关文章推荐
实现树状结构的两种方法
Oct 09 PHP
在PHP中检查PHP文件是否有语法错误的方法
Dec 23 PHP
PHP自定义函数收代码
Aug 01 PHP
Erlang的运算符(比较运算符,数值运算符,移位运算符,逻辑运算符)
Jul 23 PHP
php图片加中文水印实现代码分享
Oct 31 PHP
yii去掉必填项中星号的方法
Dec 28 PHP
PHP的PDO常用类库实例分析
Apr 07 PHP
Symfony2获取web目录绝对路径、相对路径、网址的方法
Nov 14 PHP
CI框架封装的常用图像处理方法(缩略图,水印,旋转,上传等)
Nov 22 PHP
php获取给定日期相差天数的方法分析
Feb 20 PHP
PHP中error_reporting函数用法详细介绍
Jun 11 PHP
PHP常见数组排序方法小结
Aug 20 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下打开phpMyAdmin出现403错误的问题解决方法
2013/05/23 PHP
PHP在引号前面添加反斜杠(PHP去除反斜杠)
2013/09/28 PHP
php防止伪造的数据从URL提交方法
2014/06/27 PHP
跟我学Laravel之请求(Request)的生命周期
2014/10/15 PHP
使用 laravel sms 构建短信验证码发送校验功能
2017/11/06 PHP
PHP使用HTML5 FileApi实现Ajax上传文件功能示例
2019/07/01 PHP
JavaScript拆分字符串时产生空字符的解决方案
2014/09/26 Javascript
JS Array.slice 截取数组的实现方法
2016/01/02 Javascript
JS中检测数据类型的几种方式及优缺点小结
2016/12/12 Javascript
利用策略模式与装饰模式扩展JavaScript表单验证功能
2017/02/14 Javascript
React+react-dropzone+node.js实现图片上传的示例代码
2017/08/23 Javascript
javascript函数的节流[throttle]与防抖[debounce]
2017/11/15 Javascript
从vue源码解析Vue.set()和this.$set()
2018/08/30 Javascript
使用JQuery自动完成插件Auto Complete详解
2019/06/18 jQuery
原生JS实现多条件筛选
2020/08/19 Javascript
[17:00]DOTA2 HEROS教学视频教你分分钟做大人-帕克
2014/06/10 DOTA
python 字符串split的用法分享
2013/03/23 Python
python开发之文件操作用法实例
2015/11/13 Python
Java Web开发过程中登陆模块的验证码的实现方式总结
2016/05/25 Python
Python的Django应用程序解决AJAX跨域访问问题的方法
2016/05/31 Python
Python实现的矩阵类实例
2017/08/22 Python
python实现Adapter模式实例代码
2018/02/09 Python
python mqtt 客户端的实现代码实例
2019/09/25 Python
为什么相对PHP黑python的更少
2020/06/21 Python
Python3如何使用多线程升程序运行速度
2020/08/11 Python
使用HTML5的Notification API制作web通知的教程
2015/05/08 HTML / CSS
中国领先的专业演出票务网:永乐票务
2016/08/29 全球购物
Melijoe美国官网:法国奢侈童装购物网站
2017/04/19 全球购物
俄罗斯在线购买飞机票、火车票、巴士票网站:Tutu.ru
2020/03/16 全球购物
AURALog面试题软件测试方面
2013/10/22 面试题
应聘教师自荐书
2014/06/16 职场文书
2014年安全保卫工作总结
2014/11/13 职场文书
股权投资协议书
2016/03/23 职场文书
2019商业计划书格式、范文
2019/04/24 职场文书
html+css实现分层金字塔的实例
2021/06/02 HTML / CSS
React实现动效弹窗组件
2021/06/21 Javascript