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 破解防盗链图片函数
Dec 09 PHP
php 数组的一个悲剧?
May 11 PHP
php自动获取字符串编码函数mb_detect_encoding
May 31 PHP
PHP删除数组中的特定元素的代码
Jun 28 PHP
php中使用preg_replace函数匹配图片并加上链接的方法
Feb 06 PHP
基于php中使用excel的简单介绍
Aug 02 PHP
PHP中4个加速、缓存扩展的区别和选用建议
Mar 12 PHP
php将数组转换成csv格式文件输出的方法
Mar 14 PHP
WordPress网站性能优化指南
Nov 18 PHP
Laravel的throttle中间件失效问题解决方法
Oct 09 PHP
PHP lcfirst()函数定义与用法
Mar 08 PHP
PHP实现字符串的全排列详解
Apr 24 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
THINKPHP2.0到3.0有哪些改进之处
2015/01/04 PHP
PHP curl使用实例
2015/07/02 PHP
使用Firebug对js进行断点调试的图文方法
2011/04/02 Javascript
jQuery实现切换页面布局使用介绍
2011/10/09 Javascript
Javascript处理DOM元素事件实现代码
2012/05/23 Javascript
fancybox modal的完美解决(右上的X)
2012/10/30 Javascript
验证码按回车不变解决方法
2013/03/29 Javascript
原生js和jquery中有关透明度设置的相关问题
2014/01/08 Javascript
Nodejs实现的一个简单udp广播服务器、客户端
2014/09/25 NodeJs
Javascript 运动中Offset的bug解决方案
2014/12/24 Javascript
js实现字符串和数组之间相互转换操作
2016/01/12 Javascript
使用jquery获取url及url参数的简单实例
2016/06/14 Javascript
jQuery实现带延时功能的水平多级菜单效果【附demo源码下载】
2016/09/21 Javascript
JS简单生成随机数(随机密码)的方法
2017/05/11 Javascript
vue2.0获取鼠标位置的方法
2018/09/13 Javascript
vue实现codemirror代码编辑器中的SQL代码格式化功能
2019/08/27 Javascript
微信小程序常用的3种提示弹窗实现详解
2019/09/19 Javascript
解决Idea、WebStorm下使用Vue cli脚手架项目无法使用Webpack别名的问题
2019/10/11 Javascript
Python 带有参数的装饰器实例代码详解
2018/12/06 Python
Python实现的读取文件内容并写入其他文件操作示例
2019/04/09 Python
Python button选取本地图片并显示的实例
2019/06/13 Python
100行Python代码实现每天不同时间段定时给女友发消息
2019/09/27 Python
浅析两列自适应布局的3种思路
2016/05/03 HTML / CSS
CSS3选择器新增问题的实现
2021/01/21 HTML / CSS
H5 meta小结(前端必看篇)
2016/08/24 HTML / CSS
无畏的旅行:Intrepid Travel
2017/12/20 全球购物
Sarenza德国:法国最大的时尚鞋和包包网上商店
2019/06/08 全球购物
简述Linux文件系统通过i节点把文件的逻辑结构和物理结构转换的工作过程
2012/04/17 面试题
毕业生在校学习的自我评价分享
2013/10/08 职场文书
经贸日语专业个人求职信
2013/12/13 职场文书
音乐器材管理制度
2014/01/31 职场文书
优秀学生干部推荐材料
2014/02/03 职场文书
策划总监岗位职责
2014/02/16 职场文书
公司廉洁自律承诺书
2014/03/27 职场文书
2015年语文教师工作总结
2015/05/25 职场文书
教你用eclipse连接mysql数据库
2021/04/22 MySQL