码迷,mamicode.com
首页 > Web开发 > 详细

php的连贯操作

时间:2018-03-16 11:18:45      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:reac   简单   添加   随机数   知识   cti   bbb   each   new   

用过tp的朋友们一定知道他封装的连贯操作,这里简单介绍一下如何实现 无顺序的连贯调用。以及他的原理。(大神略过....)

首先说下两个要点,

一、无顺序

既然是无顺序,那就意味着可以先调用任何一个方法,如何实现呢 ,答案很简单那就是保证每个方法都返回 $this(也就是当前被实例化的对象)。

二调用php函数

这里有两个知识点

①__call(不知道的可以去看手册啊,手册上讲的很清楚)。

②call_user_func_array();还有一个call_user_func()不过没有call_user_func_array()牛逼。

在连贯操作中如果你调用一个未定义的方法,毫无疑问肯定会报错。这个时候就要用到__call,然后使用call_user_func_array去调用php函数。

③多讲一嘴 mergeStr中 有用到一个func_get_args,当函数的参数不确定的时候该函数灰常有用,一定要mark呦

下面举一个小小的例子,以供参考.

 

class Str
{
    public $value;

    public function __construct($str=null)
    {
        $this->value = $str;
    }
    
    //合并随机数
    public function mergeRand()
    {
        $rand = mt_rand(10000, 99999);
        $this->value .= $rand;
        return $this;
    }

    //合并自定义子串
    public function mergeStr()
    {
        $arr = func_get_args();
        if($arr) {
            foreach ($arr as $ar)
            {
                $this->value .= $ar;
            }
        }
        return $this;
    }

    //添加时间戳
    public function addUnix()
    {
        $this->value .= ‘_‘ . time();
        return $this;
    }

  /*  public function __call($name, $args)
    {
        $this->value = call_user_func($name, $this->value, $args[0]);

        return $this;
    }*/
    public function __call($name, $args)
     {
         array_unshift($args, $this->value);
         $this->value = call_user_func_array($name, $args);
         return $this;
     }
}

$str = new Str(‘,aaaabbbb,‘);

echo $str->trim(‘,‘)->mergeStr(‘CC‘,‘DD‘)->addUnix()->mergeRand()->md5()->value;

die;

 

php的连贯操作

标签:reac   简单   添加   随机数   知识   cti   bbb   each   new   

原文地址:https://www.cnblogs.com/ngx171/p/8579370.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!