zoukankan      html  css  js  c++  java
  • php链式操作的实现

    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链式操作的实现的详细内容

    更多内容请访问

    怎么从一名码农成为架构师的必看知识点:目录大全(持续更新)50W年薪挑战!

  • 相关阅读:
    CSUST 4005-你真的会!(分治思维+线段树)
    CSUST 4007-你真的会图论吗?(思维-三元环)
    CSUST 4002-你真的会字符串吗?(DP)
    Odoo下拉动作列表
    Odoo Shell
    Odoo report
    Odoo Web Service API
    Odoo启动过程
    Odoo10 变化
    Odoo10尝鲜:出勤登记
  • 原文地址:https://www.cnblogs.com/a609251438/p/12517145.html
Copyright © 2011-2022 走看看