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 相关文章推荐
用Flash图形化数据(一)
Oct 09 PHP
杏林同学录(三)
Oct 09 PHP
PHP 文件上传进度条的两种实现方法的代码
Nov 25 PHP
php中使用Curl、socket、file_get_contents三种方法POST提交数据
Aug 12 PHP
解析PHP处理换行符的问题 \r\n
Jun 13 PHP
体育彩票排列三组选三算法分享
Mar 07 PHP
跟我学Laravel之配置Laravel
Oct 15 PHP
PHP函数func_num_args用法实例分析
Dec 07 PHP
PHP生成图片缩略图类示例
Jan 12 PHP
简单谈谈 php 文件锁
Feb 19 PHP
确保Laravel网站不会被嵌入到其他站点中的方法
Oct 18 PHP
PHP过滤器 filter_has_var() 函数用法实例分析
Apr 23 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
Flash空降上海 化身大魔王接受挑战
2020/03/02 星际争霸
php解析html类库simple_html_dom(详细介绍)
2013/07/05 PHP
PHP延迟静态绑定示例分享
2014/06/22 PHP
PHP中让curl支持sock5的代码实例
2015/01/21 PHP
PHP封装CURL扩展类实例
2015/07/28 PHP
了解了这些才能开始发挥jQuery的威力
2013/10/10 Javascript
js代码实现点击按钮出现60秒倒计时
2021/01/28 Javascript
JavaScript获取客户端IP的方法(新方法)
2016/03/11 Javascript
不能不知道的10个angularjs英文学习网站
2016/03/23 Javascript
jQuery each函数源码分析
2016/05/25 Javascript
URL的参数中有加号传值变为空格的问题(URL特殊字符)
2016/11/04 Javascript
基于Vuejs框架实现翻页组件
2020/06/29 Javascript
vue实现树形菜单效果
2018/03/19 Javascript
微信小程序踩坑记录之解决tabBar.list[3].selectedIconPath大小超过40kb
2018/07/04 Javascript
animate.css在vue项目中的使用教程
2018/08/05 Javascript
详解多页应用 Webpack4 配置优化与踩坑记录
2018/10/16 Javascript
Vue解析剪切板图片并实现发送功能
2020/02/04 Javascript
python入门前的第一课 python怎样入门
2018/03/06 Python
python爬取微信公众号文章的方法
2019/02/26 Python
如何基于Python创建目录文件夹
2019/12/31 Python
tensorflow实现tensor中满足某一条件的数值取出组成新的tensor
2020/01/04 Python
Pytorch 实现冻结指定卷积层的参数
2020/01/06 Python
jupyter notebook 添加kernel permission denied的操作
2020/04/21 Python
如何完美的建立一个python项目
2020/10/09 Python
2021年值得向Python开发者推荐的VS Code扩展插件
2021/01/25 Python
日本民宿预约平台:STAY JAPAN
2017/07/01 全球购物
软件测试有哪些?什么是配置项?
2012/02/12 面试题
公务员年总结的自我评价
2013/10/25 职场文书
行政助理岗位职责范文
2013/12/03 职场文书
求职自荐信怎么写
2014/03/06 职场文书
幼儿园毕业寄语
2014/04/03 职场文书
上海世博会口号
2014/06/19 职场文书
JDBC连接的六步实例代码(与mysql连接)
2021/05/12 MySQL
MySQL系列之七 MySQL存储引擎
2021/07/02 MySQL
MySQL常见优化方案汇总
2022/01/18 MySQL
Kubernetes中Deployment的升级与回滚
2022/04/01 Servers