2011-08-22 28 views
3

可能重複:
PHP method chaining benefits?
PHP OOP: Method Chaining

有人能告訴我爲什麼要使用 回報$這一點; 的PHP類方法, 我已經看到,在一些方法類,如:

public function registerPrefix($prefix, $path) 
{ 

    if(isset($this->prefixes[$prefix])) { 
     $path = array_merge($this->prefixes[$prefix], (array) $path); 
    } 
    $this->prefixes[$prefix] = (array) $path; 
    return $this; 
} 



public function register() 
{ 
    spl_autoload_register(array($this, 'loadClass')); 
    return $this; 
} 

感謝

回答

4

這樣的方法調用是可鏈接的,例如

$myobj->registerPrefix("something", "something")->register(); 

如果您從方法調用中返回對象本身,則可以調用方法的返回值的方法。

+1

+1正確。參見[Fluent interface](http://en.wikipedia.org/wiki/Fluent_interface)和[Method chaining](http://en.wikipedia.org/wiki/Method_chaining)。 – netcoder

1

這允許調用同一對象的多種方法是這樣的:

$object->registerPrefix(...)->register(); 

這允許創建流利/環連接的接口。

1

它允許方法調用,如的鏈接:

$ob->step1()->step2()->step3(); 

爲並列於:

$ob->step1(); 
$ob->step2(); 
$ob->step3(); 
1

一般使用return使函數返回一個值。

具體來說,您可以使用return $this來返回對象。

這有時被用於方法鏈接:

$that = new ThisClass(); 

$that->does()->what()->ever(); 

是現代一些時間前。可以是有益的,但有限制:

$that->does()->what()->ever()->and()->how()->to()->handle()->errors()->and()->very_long()->chains()->question_mark()->exclamation_mark(); 
1

這種方法允許方法鏈接,例如:

$object->method1()->method2()->method3(); 

,而不是:

$object->method1(); 
$object->method2(); 
$object->method3(); 
1

當在對象上下文中調用某個方法時,可以使用僞變量$ this。 $這是對調用對象的引用(通常是該方法所屬的對象,但如果該方法是從輔助對象的上下文靜態調用的,可能是另一個對象)。你可以從PHP函數中返回任何你想要的。它確實不是必須是$這。

+0

有趣的靜態調用。你有關於這個的鏈接? – hakre

+0

@hakre:http://no.php.net/manual/en/language.oop5.late-static-bindings.php –

+1

嗯,那我不明白你指的是什麼。在靜態函數調用中,根本沒有'$ this'。請詳細說明。 – hakre