2016-12-07 82 views
0

我只需要解釋或推動正確的方向如何搜索:對於某些類方法,子方法(?)是什麼?用另一種方法在類中的PHP方法?

我見過像電話:

$data = Log::Bank($var1, $var2)->start(); 
$data = Log::Bank($var1, $var2)->refund(); 

或類似

$xml = getData($uri)->toArray(); 

哪些start()refund()toArray()選擇?

回答

1

這些方法返回的對象上還有其他方法並且也被調用。所以getData將返回一些具有toArray()方法的對象。

您可以和返回對象本身和使用方法鏈,即

class MailBuilder { 
private $subject; 
private$ $body; 

public function setSubject($body) { 
    $this->body = $body; 

    return $this; 
} 

public function setBody($body) { 
    $this->subject = $subject; 

    return $this; 
} 
} 

,然後你可以這樣做:

$builder = new MailBuilder(); 
$builder->setSubject('something')->setBody('something'); 

所以,你可以這樣做,因爲該方法返回對象本身,儘管你可以將調用鏈接到下一個方法。

記住這樣的代碼(調用嵌套太深對象)不好(其稱爲火車事故):

$object->someMethodReturningObject()->someOtherMethod()->nextObjectMethod() 
+0

你有沒有教程的鏈接,我可以閱讀和理解它們是如何工作的以及它們是如何創建的? – Peon

+0

我建議這樣做,以便在PHP中很好地掌握oo,並且文檔確實很好 - http://php.net/manual/en/language.oop5.php您可以檢出其他一些教程,如果格式不適合你,只需搜索php oo教程...順便說一句。 $ this在一個對象(類)上下文中將返回該對象的實例(在我的例子中是MailBuilder) –

1

這些都不是子方法,他們的方法鏈接。在這種情況下,Log::Bank($var1, $var2)將返回一個對象。從該方法返回的對象具有您可以使用的start()方法。所以當你在最後添加->start()時,你會在返回的對象上運行它。

相關問題