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 相关文章推荐
海河写的 Discuz论坛帖子调用js的php代码
Aug 23 PHP
php 404错误页面实现代码
Jun 22 PHP
php-perl哈希算法实现(times33哈希算法)
Dec 30 PHP
PHP正则提取不包含指定网址的图片地址的例子
Apr 21 PHP
ThinkPHP框架设计及扩展详解
Nov 25 PHP
PHP 使用memcached简单示例分享
Mar 05 PHP
PHP session文件独占锁引起阻塞问题解决方法
May 12 PHP
Thinkphp实现自动验证和自动完成
Dec 19 PHP
CodeIgniter配置之database.php用法实例分析
Jan 20 PHP
深入学习微信网址链接解封的防封原理visit_type
Aug 15 PHP
php给数组赋值的实例方法
Sep 26 PHP
PHP ElasticSearch做搜索实例讲解
Feb 05 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图片处理之使用imagecopyresampled函数实现图片缩放例子
2014/11/19 PHP
php实现头像上传预览功能
2017/04/27 PHP
JS 中document.URL 和 windows.location.href 的区别
2009/11/11 Javascript
将HTMLCollection/NodeList/伪数组转换成数组的实现方法
2011/06/20 Javascript
网页中返回顶部代码(多种方法)另附注释说明
2013/04/24 Javascript
js左侧三级菜单导航实例代码
2013/09/13 Javascript
JQuery选择器、过滤器大整理
2015/05/26 Javascript
AngularJS实现元素显示和隐藏的几个案例
2015/12/09 Javascript
基于javascript实现图片预加载
2016/01/05 Javascript
JS获取当前脚本文件的绝对路径
2016/03/02 Javascript
jquery 全选、全不选、反选效果的实现代码【推荐】
2016/05/05 Javascript
详解Vue.js基于$.ajax获取数据并与组件的data绑定
2017/05/26 Javascript
JavaScript实现的斑马线表格效果【隔行变色】
2017/09/18 Javascript
JS处理数据四舍五入(tofixed与round的区别详解)
2017/10/26 Javascript
JavaScript获取用户所在城市及地理位置
2018/04/21 Javascript
vue-cli 构建骨架屏的方法示例
2018/11/08 Javascript
详解Vue SSR( Vue2 + Koa2 + Webpack4)配置指南
2018/11/13 Javascript
vscode配置vue下的es6规范自动格式化详解
2019/03/20 Javascript
JS常用排序方法实例代码解析
2020/03/03 Javascript
解决vue+webpack项目接口跨域出现的问题
2020/08/10 Javascript
微信小程序实现页面左右滑动
2020/11/16 Javascript
python通过自定义isnumber函数判断字符串是否为数字的方法
2015/04/23 Python
python字典基本操作实例分析
2015/07/11 Python
Python实现的随机森林算法与简单总结
2018/01/30 Python
python解决js文件utf-8编码乱码问题(推荐)
2018/05/02 Python
python绘制直线的方法
2018/06/30 Python
完美解决Django2.0中models下的ForeignKey()问题
2020/05/19 Python
Python pytesseract验证码识别库用法解析
2020/06/29 Python
Django mysqlclient安装和使用详解
2020/09/17 Python
Office DEPOT法国官网:欧迪办公用品采购
2018/01/03 全球购物
巴西体育用品商店:Lojão dos Esportes
2018/07/21 全球购物
美国豪华的多品牌精品店:The Webster
2019/07/31 全球购物
世界排名第一的运动鞋市场:Flight Club
2020/01/03 全球购物
总经理人事任命书
2014/06/05 职场文书
2015年食品安全宣传周活动总结
2015/07/09 职场文书
Mybatis-plus在项目中的简单应用
2021/07/01 Java/Android