解除引用混淆?这个例子叫做什么?

时间:2010-03-14 15:20:54

标签: php

考虑这个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

仔细研究第二个例子......

  • 这种表达方式的名称是什么?
  • 这是否与取消引用有关?

  • 可以使用哪种编程语言?

  • 还有哪些其他形式?

2 个答案:

答案 0 :(得分:2)

它被称为method chaining,你可以用很多语言看到它。它并不完全取消引用;每个方法调用都返回一个对象,下一个方法将该对象作为活动对象。这是PHP和JavaScript中的一个非常熟悉的概念(想想jQuery)和许多语言,每个语言都有自己的调用惯用语。

答案 1 :(得分:1)

处理对象时,解除引用操作符用于从对象名称访问对象。在您给出的示例中 - >是解除引用操作符,因此您在示例中使用解除引用。

第一个示例是创建一个显式命名的对象,您将其命名为$ b。在第二个示例中,您还创建了对象,但您没有命名它,您正在匿名使用它。但在这两种情况下,您都在创建一个对象并通过解除引用操作符访问它。

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