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 相关文章推荐
ftp类(myftp.php)
Oct 09 PHP
如何跨站抓取别的站点的页面的补充
Oct 09 PHP
PHP简单系统数据添加以及数据删除模块源文件下载
Jun 07 PHP
php实现多维数组中每个单元值(数字)翻倍的方法
Feb 16 PHP
php中define用法实例
Jul 30 PHP
php多线程实现方法及用法实例详解
Oct 26 PHP
PHP中__autoload和Smarty冲突的简单解决方法
Apr 08 PHP
php文件操作小结(删除指定文件/获取文件夹下的文件名/读取文件夹下图片名)
May 09 PHP
phpStudy中升级MySQL版本到5.7.17的方法步骤
Aug 03 PHP
PHP调用API接口实现天气查询功能的示例
Sep 21 PHP
浅析PHP开发规范
Feb 05 PHP
PHP使用PDO操作sqlite数据库应用案例
Mar 07 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桌面中心(四) 数据显示
2007/03/11 PHP
php HtmlReplace输入过滤安全函数
2010/07/03 PHP
解析coreseek for sphinx的使用
2013/06/21 PHP
Laravel中扩展Memcached缓存驱动实现使用阿里云OCS缓存
2015/02/10 PHP
深入理解PHP变量的值类型和引用类型
2015/10/21 PHP
IE不出现Flash激活框的小发现的js实现方法
2007/09/07 Javascript
jquery 页面全选框实践代码
2010/04/02 Javascript
JavaScript 面向对象编程(2) 定义类
2010/05/18 Javascript
提升你网站水平的jQuery插件集合推荐
2011/04/19 Javascript
js的alert样式如何更改如背景颜色
2014/01/22 Javascript
Fullpage.js固定导航栏-实现定位导航栏
2016/03/17 Javascript
Javascript简写条件语句(推荐)
2016/06/12 Javascript
JavaScript 自定义事件之我见
2017/09/25 Javascript
Vue动态面包屑功能的实现方法
2019/07/01 Javascript
vue下axios拦截器token刷新机制的实例代码
2020/01/17 Javascript
python实现2014火车票查询代码分享
2014/01/10 Python
python中实现延时回调普通函数示例代码
2017/09/08 Python
Python使用pymysql从MySQL数据库中读出数据的方法
2018/07/25 Python
django写用户登录判定并跳转制定页面的实例
2019/08/21 Python
Python数据分析模块pandas用法详解
2019/09/04 Python
python爬虫多次请求超时的几种重试方法(6种)
2020/12/01 Python
HTML5中判断用户是否正在浏览页面的方法
2014/05/03 HTML / CSS
德国2018年度最佳在线药房:Bodfeld Apotheke
2019/11/04 全球购物
电子商务专业推荐信范文
2013/12/02 职场文书
美德好少年主要事迹
2014/01/29 职场文书
秋季运动会广播稿
2014/02/22 职场文书
高中军训感言600字
2014/03/11 职场文书
班主任对学生的评语
2014/04/26 职场文书
还款承诺书范文
2014/05/20 职场文书
2014年班主任德育工作总结
2014/12/05 职场文书
2015年幼师工作总结
2015/04/28 职场文书
2015年纪念“卢沟桥事变”78周年活动方案
2015/05/06 职场文书
医者仁心观后感
2015/06/17 职场文书
python办公自动化之excel的操作
2021/05/23 Python
JS数组方法some、every和find的使用详情
2021/10/05 Javascript
java后台调用接口及处理跨域问题的解决
2022/03/24 Java/Android