2012-06-17 20 views
16

Kiểm tra khung công tác Zend Tôi thấy rằng mọi phương thức setter của bất kỳ lớp nào của nó (của những gì tôi đã kiểm tra) đều trả về cá thể của lớp mà nó đang sống. Không chỉ thiết lập giá trị mà còn đặt giá trị và trả về $ this. Ví dụ:

/* Zend_Controller_Router */ 
public function setGlobalParam($name, $value) { 
    $this->_globalParams[$name] = $value; 
    return $this; 
} 

    /* Zend_Controller_Request */ 
public function setBaseUrl($baseUrl = null) { 
    // ... some code here ... 
    $this->_baseUrl = rtrim($baseUrl, '/'); 
    return $this; 
} 

    /* Zend_Controller_Action */ 
public function setFrontController(Zend_Controller_Front $front) { 
    $this->_frontController = $front; 
    return $this; 
} 

Và cứ tiếp tục như vậy. Mỗi setter công cộng trả về $ this. Và không chỉ setters, cũng có một số phương pháp hành động, họ cũng trả $ này:

public function addConfig(Zend_Config $config, $section = null) { 
    // ... some code here ... 
    return $this; 
} 

gì được này cần thiết? Sự trở lại của $ này làm gì? Nó có ý nghĩa đặc biệt nào không?

+4

Trả về '$ (this)' có nghĩa là bạn có thể chuỗi phương pháp, ví dụ '$ myClass-> method_1 ($ x) -> method_2 ($ y)'. –

+1

Tôi cũng nhận thấy điều này trong quá khứ và không bao giờ nghĩ đến việc đặt câu hỏi. Cảm ơn tôi bây giờ có câu trả lời. – RockyFord

Trả lời

37

Các return $this cho phép chaining các phương pháp như:

$foo->bar('something')->baz()->myproperty 
4

Đó là vì vậy phương pháp mà các cuộc gọi trên một đối tượng có thể được "xích", như thế này.

$obj -> setFoo ('foo') -> setBar ('bar') -> setBaz ('baz') -> setFarble ('farble'); 
+0

Tôi biết nhận xét này đã được thực hiện vào năm 2012 và mục đích chính của nó là để chứng minh việc sử dụng các phương pháp chuỗi, nhưng đối với tất cả những người mới, bạn chỉ cần học về điều này: XIN ĐỪNG đặt tất cả những khoảng trống đó vào giữa! :) – bazzaretta

+0

@bazzaretta Bạn không phải là ông chủ của khoảng trắng! – GordonM