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 相关文章推荐
建站常用13种PHP开源CMS比较
Aug 23 PHP
基于php socket(fsockopen)的应用实例分析
Jun 02 PHP
如何在smarty中增加类似foreach的功能自动加载数据
Jun 26 PHP
php calender(日历)二个版本代码示例(解决2038问题)
Dec 24 PHP
ThinkPHP模版引擎之变量输出详解
Dec 05 PHP
微信公众平台开发之配置与请求
Aug 26 PHP
PHP 7.0.2 正式版发布
Jan 08 PHP
thinkPHP实现将excel导入到数据库中的方法
Apr 22 PHP
Smarty简单生成表单元素的方法示例
May 23 PHP
使用WAMP搭建PHP本地开发环境
May 10 PHP
php魔法函数与魔法常量使用介绍
Jul 23 PHP
PHP基于堆栈实现的高级计算器功能示例
Sep 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
zend framework多模块多布局配置
2011/02/26 PHP
PHP下判断网址是否有效的代码
2011/10/08 PHP
php生成RSS订阅的方法
2015/02/13 PHP
原生Js与jquery的多组处理, 仅展开一个区块的折叠效果
2011/01/09 Javascript
js运动动画的八个知识点
2015/03/12 Javascript
js多功能分页组件layPage使用方法详解
2016/05/19 Javascript
AngularJS国际化详解及示例代码
2016/08/18 Javascript
jQuery中ajax错误调试分析
2016/12/01 Javascript
jQuery实现表格元素动态创建功能
2017/01/09 Javascript
让div运动起来 js实现缓动效果
2017/07/06 Javascript
浅谈JS 数字和字符串之间相互转化的纠纷
2017/10/20 Javascript
Fetch超时设置与终止请求详解
2019/05/18 Javascript
Vue.js实现大屏数字滚动翻转效果
2019/11/29 Javascript
如何在微信小程序中存setStorage
2019/12/13 Javascript
Python中subprocess的简单使用示例
2015/07/28 Python
详解Python异常处理中的Finally else的功能
2017/12/29 Python
python获取交互式ssh shell的方法
2019/02/14 Python
django自带serializers序列化返回指定字段的方法
2019/08/21 Python
使用Rasterio读取栅格数据的实例讲解
2019/11/26 Python
怎么解决pycharm license Acti的方法
2020/10/28 Python
英国首屈一指的票务公司:See Tickets
2019/05/11 全球购物
UDP协议功能
2013/01/06 面试题
会计实习生工作总结的自我评价
2013/10/07 职场文书
单位办理社保介绍信
2014/01/10 职场文书
竞聘自述材料
2014/08/25 职场文书
缅怀先烈演讲稿
2014/09/03 职场文书
乡党委干部党的群众路线教育实践活动个人对照检查材料思想汇报
2014/10/01 职场文书
个人查摆剖析材料
2014/10/04 职场文书
2014年保管员工作总结
2014/11/18 职场文书
公司文体活动总结
2015/05/07 职场文书
微观世界观后感
2015/06/10 职场文书
任命书格式范文
2015/09/22 职场文书
2016年员工政治思想表现评语
2015/12/02 职场文书
话题作文之财富(600字)
2019/12/03 职场文书
golang中的空接口使用详解
2021/03/30 Python
MySQL命令无法输入中文问题的解决方式
2021/08/30 MySQL