微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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教程:/course/list/php/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐