2010-03-14 62 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。在第二个例子中,你也创建了这个对象,但是你没有命名它,你正在匿名使用它。但是,在这两种情况下,您都在创建一个对象并通过解引用操作符来访问它。

这种类型的语句适用于所有面向对象的语言。