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 相关文章推荐
打造计数器DIY三步曲(中)
Oct 09 PHP
完美解决dedecms中的[html][/html]和[code][/code]问题
Mar 20 PHP
php date()日期时间函数详解
May 16 PHP
php.ini中date.timezone设置分析
Jul 29 PHP
php判断上传的Excel文件中是否有图片及PHPExcel库认识
Jan 11 PHP
PHP判断图片格式的七种方法小结
Jun 03 PHP
如何给phpcms v9增加类似于phpcms 2008中的关键词表
Jul 01 PHP
phpmyadmin打开很慢的解决方法
Apr 21 PHP
php mb_substr()函数截取中文字符串应用示例
Jul 29 PHP
php数组索引的Key加引号和不加引号的区别
Aug 19 PHP
Zend Framework动作助手Redirector用法实例详解
Mar 05 PHP
如何使用PHP给图片加水印
Oct 12 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上传图片类(随机名,缩略图,加水印)
2010/06/30 PHP
基于PHP服务端图片生成缩略图的方法详解
2013/06/20 PHP
学习php设计模式 php实现命令模式(command)
2015/12/08 PHP
Yii快速入门经典教程
2015/12/28 PHP
利用PHP生成静态html页面的原理
2016/09/30 PHP
php中各种定义变量的方法小结
2017/10/18 PHP
PHP 实现文件压缩解压操作的方法
2019/06/14 PHP
node.js中的fs.readdirSync方法使用说明
2014/12/17 Javascript
AngularJS模块管理问题的非常规处理方法
2015/04/29 Javascript
详解javascript函数的参数
2015/11/10 Javascript
JavaScript中闭包之浅析解读(必看篇)
2016/08/25 Javascript
JS+CSS实现下拉刷新/上拉加载插件
2017/03/31 Javascript
vue2.0全局组件之pdf详解
2017/06/26 Javascript
webpack构建react多页面应用详解
2017/09/15 Javascript
jquery应用实例分享_实现手风琴特效
2018/02/01 jQuery
vue将时间戳转换成自定义时间格式的方法
2018/03/02 Javascript
Vue.js@2.6.10更新内置错误处机制Fundebug同步支持相应错误监控
2019/05/13 Javascript
vue 使用微信jssdk,调用微信相册上传图片功能
2020/11/13 Javascript
python检测远程服务器tcp端口的方法
2015/03/14 Python
Python中exit、return、sys.exit()等使用实例和区别
2015/05/28 Python
解决python文件字符串转列表时遇到空行的问题
2017/07/09 Python
Python 绘图库 Matplotlib 入门教程
2018/04/19 Python
Python参数解析模块sys、getopt、argparse使用与对比分析
2019/04/02 Python
Python使用Chrome插件实现爬虫过程图解
2020/06/09 Python
python连接mysql数据库并读取数据的实现
2020/09/25 Python
OpenCV读取与写入图片的实现
2020/10/13 Python
python 使用csv模块读写csv格式文件的示例
2020/12/02 Python
移动端rem布局的两种实现方法
2018/01/03 HTML / CSS
营销总经理岗位职责
2014/02/02 职场文书
中国梦演讲稿3分钟
2014/08/19 职场文书
就业协议书盖章的注意事项
2014/09/28 职场文书
2014年采购工作总结
2014/11/20 职场文书
2014年度考核工作总结
2014/12/24 职场文书
python 利用PyAutoGUI快速构建自动化操作脚本
2021/05/31 Python
Mybatis是这样防止sql注入的
2021/12/06 Java/Android
使用Canvas绘制一个游戏人物属性图
2022/03/25 Javascript