Какой может быть структура объекта, когда мы используем два токена оператора объекта, как это -> ->? - PullRequest
2 голосов
/ 28 июня 2010

Я видел что-то вроде этого:

echo ($hello->somethingA->somethingB);

Что это значит?

Я постараюсь прояснить свой вопрос:

Когда у нас есть $domain->something; (мы обращаемся к объекту НЕДВИЖИМОСТИ $ domain OBJECT. Точный?

Когда у нас есть $domain->something->run();, мы говорим что-то ИМУЩЕСТВО $ DOMAIN OBJECT для доступа к методу run (). точный

Так что же мы говорим: echo ($hello->somethingA->somethingB);? Доступ к некоторым свойствам собственности? Имеет ли это смысл?

Заранее спасибо, MEM

Ответы [ 3 ]

4 голосов
/ 28 июня 2010

Да, вы получаете доступ к собственности. По-видимому, $ hello - это объект со свойством с именем $thingA. Это свойство является объектом, имеющим свойство с именем $thingB. $thingB, по-видимому, строка или какой-то другой тип, который может быть выведен на экран.

2 голосов
/ 28 июня 2010

+ 1 Скотту Сондерсу, вот пример, чтобы проиллюстрировать это:

class Hello 
{
  /**
   * @var SomethingA
   */
  public $somethingA;
}

class SomethingA
{
  /**
   * @var, don't know what type
   */
  public $somethingB;
}

$hello = new Hello();
$hello->somethingA = new SomethingA();
$hello->somethingA->somethingB = new stdClass();

var_dump($hello);
0 голосов
/ 28 июня 2010

Есть еще один аспект этого, который не был рассмотрен в других ответах. Другие ответы, которые вы получаете к свойствам, а не к методам. Но объекты PHP5 могут быть созданы для цепочки методов, и, возможно, это то, на что вы ссылаетесь.

Вместо этого:

$obj = new Object();
$obj->setId('1');
$obj->setName('name');
$obj->setAge('24');

Вы можете сделать это:

$obj = new Object();
$obj->setId('1')->setName('name')->setAge('24');

В каждом методе верните $this, и вы золотой. Смотрите эту статью для более подробной информации и вдохновения:

http://www.talkphp.com/advanced-php-programming/1163-php5-method-chaining.html

...