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令牌 Token改进版
Jul 18 PHP
php auth_http类库进行身份效验
Mar 19 PHP
使用 PHPMAILER 发送邮件实例应用
Nov 07 PHP
LotusPhp笔记之:Logger组件的使用方法
May 06 PHP
php去除换行(回车换行)的三种方法
Mar 26 PHP
百度地图API应用之获取用户的具体位置
Jun 10 PHP
php将csv文件导入到mysql数据库的方法
Dec 24 PHP
YII Framework框架教程之日志用法详解
Mar 14 PHP
php利用嵌套数组拼接与解析json的方法
Feb 07 PHP
PHP封装的XML简单操作类完整实例
Nov 13 PHP
PHP使用CURL实现下载文件功能示例
Jun 03 PHP
Laravel框架控制器的middleware中间件用法分析
Sep 30 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
《雄兵连》系列首部大电影《烈阳天道》:可能是因为期望值太高了
2020/08/18 国漫
解析如何通过PHP函数获取当前运行的环境 来进行判断执行逻辑(小技巧)
2013/06/25 PHP
php教程之魔术方法的使用示例(php魔术函数)
2014/02/12 PHP
jquery随机展示头像代码
2011/12/21 Javascript
sliderToggle在写jquery的计时器setTimeouter中不生效
2014/05/26 Javascript
nodejs命令行参数处理模块commander使用实例
2014/09/17 NodeJs
javascript中sort()的用法实例分析
2015/01/30 Javascript
JavaScript缓冲运动实现方法(2则示例)
2016/01/08 Javascript
js阻止浏览器默认行为的简单实例
2016/05/15 Javascript
原生JS实现首页进度加载动画
2016/09/14 Javascript
H5移动端图片压缩上传开发流程
2016/11/09 Javascript
简单谈谈ES6的六个小特性
2016/11/18 Javascript
微信小程序 缓存(本地缓存、异步缓存、同步缓存)详解
2017/01/17 Javascript
JS中利用swiper实现3d翻转幻灯片实例代码
2017/08/25 Javascript
vue实现导航标题栏随页面滚动渐隐渐显效果
2020/03/12 Javascript
js实现ajax的用户简单登入功能
2020/06/18 Javascript
使用 Python 获取 Linux 系统信息的代码
2014/07/13 Python
Python爬取网易云音乐上评论火爆的歌曲
2017/01/19 Python
python PyTorch参数初始化和Finetune
2018/02/11 Python
Python连接Mssql基础教程之Python库pymssql
2018/09/16 Python
Python实现直播推流效果
2019/11/26 Python
基于Numba提高python运行效率过程解析
2020/03/02 Python
PYQT5 vscode联合操作qtdesigner的方法
2020/03/24 Python
Python脚本如何在bilibili中查找弹幕发送者
2020/06/04 Python
Python 发送邮件方法总结
2020/08/10 Python
python selenium xpath定位操作
2020/09/01 Python
python 装饰器的基本使用
2021/01/13 Python
详解HTML5通讯录获取指定多个人的信息
2016/12/20 HTML / CSS
如何强制垃圾回收
2015/10/06 面试题
国外的一些J2EE面试题一
2012/10/13 面试题
《故乡》教学反思
2014/04/10 职场文书
优秀实习生主要事迹
2014/05/29 职场文书
中国文明网向国旗敬礼活动精彩寄语2014
2014/09/27 职场文书
岗位聘任报告
2015/03/02 职场文书
2015年大学班长个人工作总结
2015/04/24 职场文书
详解Golang如何优雅的终止一个服务
2022/03/21 Golang