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实现链结人气统计
Oct 09 PHP
解析php中static,const与define的使用区别
Jun 18 PHP
学习php过程中的一些注意点的总结
Oct 25 PHP
限制ckeditor上传图片文件大小的方法
Nov 15 PHP
php生成excel列序号代码实例
Dec 24 PHP
字符串长度函数strlen和mb_strlen的区别示例介绍
Sep 09 PHP
php文件缓存类用法实例分析
Apr 22 PHP
php版微信小店调用api示例代码
Nov 12 PHP
使用PHP+MySql实现微信投票功能实例代码
Sep 29 PHP
mysqli扩展无法在PHP7下升级问题的解决
Sep 10 PHP
PHP判断一个变量是否为整数、正整数的方法示例
Sep 11 PHP
php实现将数组或对象写入到文件的方法小结【三种方法】
Apr 22 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批量删除数据
2007/01/18 PHP
如何使用PHP实现javascript的escape和unescape函数
2013/06/29 PHP
php中mysql连接和基本操作代码(快速测试使用,简单方便)
2014/04/25 PHP
用php定义一个数组最简单的方法
2019/10/04 PHP
转自Jquery官方 jQuery1.1.3发布,速度提升800%,体积保持20K
2007/08/19 Javascript
比较全的JS checkbox全选、取消全选、删除功能代码
2008/12/19 Javascript
jQuery代码优化 事件委托篇
2011/11/01 Javascript
js 利用image对象实现图片的预加载提高访问速度
2013/03/29 Javascript
解决javascript:window.close()在chrome,Firefox下失效的问题
2013/05/07 Javascript
jquery DIV撑大让滚动条滚到最底部代码
2013/06/06 Javascript
深入解析contentWindow, contentDocument
2013/07/04 Javascript
js利用数组length属性清空和截短数组的小例子
2014/01/15 Javascript
jQuery实现鼠标划过展示大图的方法
2015/03/09 Javascript
深入php面向对象、模式与实践
2016/02/16 Javascript
JavaScript函数内部属性和函数方法实例详解
2016/03/17 Javascript
javascript实现瀑布流动态加载图片原理
2016/08/12 Javascript
郁闷!ionic中获取ng-model绑定的值为undefined如何解决
2016/08/27 Javascript
BootStrap的两种模态框方式
2017/05/10 Javascript
详解tween.js的使用教程
2017/09/14 Javascript
JS中实现隐藏部分姓名或者电话号码的代码
2018/07/17 Javascript
浅谈开发eslint规则
2018/10/01 Javascript
JavaScript实现的3D旋转魔方动画效果实例代码
2019/07/31 Javascript
python实现在控制台输入密码不显示的方法
2015/07/02 Python
解决Python pandas df 写入excel 出现的问题
2018/07/04 Python
利用Python产生加密表和解密表的实现方法
2019/10/15 Python
python字符串下标与切片及使用方法
2020/02/13 Python
5行Python代码实现图像分割的步骤详解
2020/05/25 Python
python和go语言的区别是什么
2020/07/20 Python
优秀社区干部事迹材料
2014/02/03 职场文书
幼儿园三八妇女节活动方案
2014/03/11 职场文书
家长对老师的感言
2014/03/11 职场文书
委托书模板
2014/04/04 职场文书
2014年副班长工作总结
2014/12/10 职场文书
Python控制台输出俄罗斯方块移动和旋转功能
2021/04/18 Python
MySQL实战记录之如何快速定位慢SQL
2022/03/23 MySQL
输入框跟随文字内容适配宽实现示例
2022/08/14 Javascript