2016-12-07 2 views
0

Мне просто нужно объяснить или нажать в правильном направлении, как искать это: какие подтемы (?) Для некоторых методов класса?PHP-метод в классе с другим методом?

Я видел, как звонки:

$data = Log::Bank($var1, $var2)->start(); 
$data = Log::Bank($var1, $var2)->refund(); 

или как

$xml = getData($uri)->toArray(); 

какие start(), refund() и toArray() варианты?

ответ

1

Эти методы возвращают объекты, на которых есть другие методы, и их также вызывают. Таким образом getData вернет некоторый объект, который имеет метод toArray().

Также Вы можете вернуть сам объект и метод использования цепочки, т.е.

class MailBuilder { 
private $subject; 
private$ $body; 

public function setSubject($body) { 
    $this->body = $body; 

    return $this; 
} 

public function setBody($body) { 
    $this->subject = $subject; 

    return $this; 
} 
} 

и тогда вы могли бы сделать что-то вроде:

$builder = new MailBuilder(); 
$builder->setSubject('something')->setBody('something'); 

Таким образом, вы можете сделать это, потому что методы возвращая самого объекта, и хотя вы можете просто привязать вызовы к следующим методам.

Помните, что подобный код (вызов объекты вложенными слишком глубоко) не хорошо (его называют крушение поезда):

$object->someMethodReturningObject()->someOtherMethod()->nextObjectMethod() 
+0

У вас есть ссылка на учебник, где я могу читать и понимать, как они работают и как они созданы? – Peon

+0

Я предлагаю это, чтобы получить хорошее понимание оо в php, и документация действительно хороша для этого - http://php.net/manual/en/language.oop5.php вы можете проверить некоторые другие учебные пособия, если формат не подходит вам, просто найдите php oo tutorials ... btw. $ this в контексте объекта (класса) вернет экземпляр этого объекта (MailBuilder в моем примере) –

1

Они не являются submethods, они метод цепочки. В этом случае Log::Bank($var1, $var2) вернет объект. Объект, который возвращается из этого метода, имеет метод start(), который вы можете использовать. Поэтому, когда вы добавляете ->start() в конец, вы запускаете его на возвращаемом объекте.

Смежные вопросы