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与SQL注入攻击[一]
Apr 17 PHP
如何使用Linux的Crontab定时执行PHP脚本的方法
Dec 19 PHP
php中3des加密代码(完全与.net中的兼容)
Aug 02 PHP
PHP类与对象中的private访问控制的疑问
Nov 01 PHP
基于PHP遍历数组的方法汇总分析
Jun 08 PHP
thinkphp的CURD和查询方式介绍
Dec 19 PHP
php中HTTP_REFERER函数用法实例
Nov 21 PHP
php的crc32函数使用时需要注意的问题(不然就是坑)
Apr 21 PHP
PHP面试题之文件目录操作
Oct 15 PHP
在WordPress中实现评论头像的自定义默认和延迟加载
Nov 24 PHP
php实现图片上传并利用ImageMagick生成缩略图
Mar 14 PHP
基于 Swoole 的微信扫码登录功能实现代码
Jan 15 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
一首老MP3,致敬WAR3经典
2021/03/08 魔兽争霸
用PHP动态生成虚拟现实VRML网页
2006/10/09 PHP
PHP网站安装程序制作的原理、步骤、注意事项和示例代码
2010/08/01 PHP
CodeIgniter错误mysql_connect(): No such file or directory解决方法
2014/09/06 PHP
小程序微信退款功能实现方法详解【基于thinkPHP】
2019/05/05 PHP
TP5框架实现上传多张图片的方法分析
2020/03/29 PHP
jQuery EasyUI API 中文文档 - MenuButton菜单按钮使用介绍
2011/10/06 Javascript
jQuery 中使用JSON的实现代码
2011/12/01 Javascript
innerText 使用示例
2014/01/23 Javascript
深入理解JavaScript系列(19):求值策略(Evaluation strategy)详解
2015/03/05 Javascript
[原创]Bootstrap 中下拉菜单修改成鼠标悬停直接显示
2016/04/14 Javascript
jquery ezUI 双击行记录弹窗查看明细的实现方法
2016/06/01 Javascript
第一次接触Bootstrap框架
2016/10/24 Javascript
Bootstrap一款超好用的前端框架
2017/09/25 Javascript
JavaScript编程设计模式之观察者模式(Observer Pattern)实例详解
2017/10/25 Javascript
weebox弹出窗口不居中显示的解决方法
2017/11/27 Javascript
node.js实现上传文件功能
2019/07/15 Javascript
layui 实现二级弹窗弹出之后 关闭一级弹窗的方法
2019/09/18 Javascript
js仿360开机效果
2019/12/26 Javascript
[12:21]VICI vs TNC (BO3)
2018/06/07 DOTA
python中OrderedDict的使用方法详解
2017/05/05 Python
Python数据分析之双色球统计单个红和蓝球哪个比例高的方法
2018/02/03 Python
python 3.7.0 下pillow安装方法
2018/08/27 Python
python实现远程控制电脑
2019/05/23 Python
python 实现将Numpy数组保存为图像
2020/01/09 Python
python数据分析:关键字提取方式
2020/02/24 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧(自定义信号与槽)详解与实例
2020/03/06 Python
python调用有道智云API实现文件批量翻译
2020/10/10 Python
玉兰油美国官网:OLAY美国
2018/10/25 全球购物
法国在线药房:DoctiPharma
2020/10/21 全球购物
专业销售业务员求职信
2013/11/18 职场文书
先进个人申报材料
2014/12/30 职场文书
小学三年级数学教学反思
2016/02/16 职场文书
用Python简陋模拟n阶魔方
2021/04/17 Python
用python自动生成日历
2021/04/24 Python
基于Redis过期事件实现订单超时取消
2021/05/08 Redis