PHP物件鏈式操作實現原理分析

2022-10-06 06:48:08 字數 1147 閱讀 4026

什麼是鏈式操作呢?使用jquery的同學印象應該會很深刻.在jquery中,我們經常會這樣的來操作dom元素:

$("p").css("color").addclass("selected");

連貫操作看起來的確很酷,也非常的方便**的閱讀.那麼在php裡面是否可以實現呢?答案是肯定的,當然了必須是在oop中用才行,在過程化的程式中,就沒有必要用這種方法了。

在php中,我們經常要使用很多函式:

$str = 'abs123 ';

echo strlen(trim($str));

上面**的作用就是去除字串兩邊的空格,然後輸出其長度,那麼使用鏈式程式設計就可以這樣來:

$str = 'abs123 ';

echo $str->trim()->strlen();

是不是看著更加的舒服呢?這裡主要是利用了php物件導向裡面的 __call() 和 __tostring() 魔術方法

/*** 物件鏈式操作

* 2015-04-24

*/class basechainobject

function __tostring()

function __call($name,$args)catch(exception $e)

if (!$args) else

$this->_trace_data[$name] = $this->data;

return $this;}/

* 判斷方法是否存在

* @param string

*/private function vaild_func($fn)

}public function trace()

}class string extends basechain程式設計客棧object

$str = new string('ab rewqc ');

echo $str->trim()->strlen();

$str->trace();

從以上**可以看出,當呼叫物件中不存在的方法時,會自動觸發__call()魔術方法,然後結合call_user_func()來執行鏈式操作,當輸出物件的時候觸發tostring()來輸出想要的結果.當然還有乙個方案就是在自定義的方法中使用return this,也可以實現物件鏈式的操作,大家可以自己去試試看.

Php 鏈式執行,PHP實現鏈式操作的原理詳解

在乙個類中有多個方法,當你例項化這個類,並呼叫方法時只能乙個乙個呼叫,類似 db.php class db public function where code here public function order code here public function limit code here ...

PHP實現的連貫操作 鏈式操作例項

php中的連貫操作看起來的確很酷,也非常的方便 的閱讀,當然了必須是在oop中用才行,在過程化的程式中,就沒有必要用這種方法了。有實現這個方法的有用 call來實現的,而我下面寫的這個例子,則不是用 call的,大家可以擴充套件一下吧。下面寫的這個sql語句組合類,主要是用於學習的,如果有同學想拿去...

Php 鏈式執行,PHP實現鏈式操作的三種方法詳解

在php中有很多字串函式,例如要先過濾字串收尾的空格,再求出其長度,一般的寫法是 strlen trim str 如果要實現類似js中的鏈式操作,比如像下面這樣應該怎麼寫?str trim strlen 下面分別用三種方式來實現 方法一 使用魔法函式 call結合call user func來實現 ...