php的連貫操作
阿新 • • 發佈:2018-03-16
毫無 添加 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的連貫操作