Karışıklık Dereferencing?

2 Cevap

Bu PHP örneği göz önüne alındığında:

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

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

Ben bu kullanabilirsiniz:

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

Ya da bu:

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

İkinci örnekte de yakından bir göz atalım ...

  • Ifade bu formun adı nedir?
  • Bu dereferencing ile bir ilgisi var mı?

  • Hangi programlama dilleri bu kullanılabilir?

  • Bu başka ne formları var?

2 Cevap

Bu method chaining denir, ve dilleri bir sürü görebilirsiniz. Bu tam olarak çözümleyecek değil; her yöntem çağrısı bir sonraki yöntem aktif nesne olarak alır bir nesne döndürür. Bu PHP ve JavaScript oldukça tanıdık bir kavram (jQuery düşünüyorum) ve dilleri, çağrı için kendi deyim ile her bir çok şey var.

Nesneler ile uğraşırken çözümleyecek operatör nesnenin adını bir nesneye erişmek için kullanılır. Örnekte verdi - Eğer örnekte başvurusunun kaldırılması kullanıyor böylece> çözümleyecek operatörüdür.

İlk örnek bunu B $ adlandırma, bir açıkça adlandırılmış nesne yaratıyor. İkinci örnekte de nesnesi oluştururken ama bunu adlandırma değil, anonim bunu kullanıyor. Ama her iki durumda bir nesne yaratıyor ve bir Dereferencing operatör aracılığıyla erişiyor.

Tabloların Bu tür tüm nesne yönelimli dillerde mevcuttur.