1. 程式人生 > >php的連貫操作

php的連貫操作

毫無 添加 rim 返回 調用 AC 一個 div trim

用過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的連貫操作