2014-05-12 26 views
0

我正在查看codebird-php git並注意到作者有一種方法可以檢測未在類中聲明的方法。例如,他有PHP中的變量方法

$ cb-> statuses_homeTimeline();

成功執行,儘管在Codebird類中沒有稱爲statuses_homeTimeline()的方法。

我試過尋找這種類型的建築的信息,但不知道它叫什麼,我沒有找到任何東西。 (我已經搜索了「變量方法」,「映射方法」等所有變體)?是否有反對使用它的論據?它(原則上)如何工作?

+5

您正在尋找的「魔術方法」'__call'。 – Jon

回答

4

我發現了一堆涉及__call的問題和你可以用它做的事情,但沒有什麼關於什麼__call實際上

PHP對象有許多魔術方法。最着名的是__construct

__call是一種神奇的方法,只要你嘗試調用一個不存在的方法就會被調用。對於方法來說,這是一種「全方位」的方式。

技術術語是「方法重載」。

所以當$cb->statuses_homeTimeline()被調用時,如果該方法不存在,它會改爲調用
$cb->__call("statuses_homeTimeline",array())

+0

這真是太棒了。 PHP永遠不會讓我驚歎。是否有任何理由不使用它? – jboneca

+0

這是一個全面的,所以你需要確保你收到的是有效的輸入。除此之外,不是真的。 –

+0

@jboneca:有很多理由不這樣做。讓我們從一個反問題開始:'$ cb-> statuses_homeTimeline()'到底是多好'$ cb-> whatever('status','homeTimeline')'?打字少,但少打字「嚇人真棒」?當然,這也有其原因。就像所有的事情一樣,你必須找到一個平衡點。 – Jon

1

__call()魔法。當在對象上下文中調用不可訪問的方法時觸發__call()