2010-03-14 34 views
0

考慮這個PHP例子:解引用混淆?這個例子叫做什麼?

class A 
{ 
    public function getB() 
    { 
    return new B(); 
    } 
} 

class B 
{ 
    public function test() 
    { 
    echo "Hello"; 
    } 
} 

我可以用這個:

$a = new A(); 
$b = $a->getB(); 
$b->test(); // Hello 

或者這樣:

$a = new A(); 
$a->getB()->test(); // Hello 

以在第二個例子中一探究竟......

  • Wha t是這種表達形式的名字嗎?
  • 這是否與取消引用有關?

  • 在哪種編程語言可用?

  • 這存在什麼其他形式?
+0

可能相關:德米特法http://en.wikipedia.org/wiki/Law_of_Demeter – rojoca 2010-03-14 22:40:56

回答

2

它被稱爲method chaining,你可以看到很多語言。這不完全取消引用;每個方法調用都會返回一個對象,下一個方法將其作爲活動對象。這在PHP和JavaScript(認爲jQuery)和很多語言中都是非常熟悉的概念,每種語言都有自己的調用習慣。

1

處理對象時,使用解引用操作符從對象的名稱訪問對象。在你給出的例子中 - >是解引用操作符,所以你在示例中使用瞭解引用。

第一個示例是創建一個顯式命名的對象,您將其命名爲$ b。在第二個例子中,你也創建了這個對象,但是你沒有命名它,你正在匿名使用它。但是,在這兩種情況下,您都在創建一個對象並通過解引用操作符來訪問它。

這種類型的語句適用於所有面向對象的語言。