2013-09-26 2 views
0

Я искал некоторые php-коды, и я увидел объект, который вызовет несколько методов в одной строке.Как вызвать метод по другому методу в одной строке

Я пытался понять, как это сделать, и почему мы должны использовать его?

$object->foo("Text")->anotherFoo()->bar("Aloha") 

Что это за стиль? и что это лучший способ использовать его в php-приложениях.

+0

прочитайте это http://stackoverflow.com/questions/3724112/php-method-chaining – Aris

ответ

5

Этот синтаксис называется method chaining, и это возможно, потому что каждый метод возвращает сам объект ($this). Это не всегда всегда так, оно также используется для извлечения свойства объекта, которое, в свою очередь, также может быть объектом (который может иметь свойства, являющиеся объектами, и т. Д.).

Он используется для уменьшения количества строк, на которые нужно писать код. Сравните эти два фрагмента:

Без сцепления

$object->foo("Text"); 
$object->anotherFoo(); 
$object->->bar("Aloha"); 

Использование метода формирования цепочки

$object->foo("Text")->anotherFoo()->bar("Aloha"); 
+0

, если один метод говорит, возвращает false. Будет ли это еще справедливо? – Aris

+0

@Aris Затем вы должны получить ошибку, которая на самом деле правильная, потому что она будет такой же, как и запись 'false-> method();' – silkfire

+0

, так когда это действительно так? метод должен возвращать $ this? или существует неявное правило в php, которое возвращает сам объект? – Aris

0

это используется, когда первая функция возвращает объект, который будет содержит вторую функцию, которая будет вернуть другой объект и т. д.

class X 
{ 

    public function A() 
    { 
     echo "A"; 
    } 
    public function B() 
    { 
     echo "B"; 
    } 

} 
class Y 
{ 

    public function A() 
    { 
     echo "Y"; 
    } 
    public function B() 
    { 
     return $this; 
    } 

} 

$y = new Y(); 
$y->B()->A();//this will run 

$x = new X(); 
$x->A()->B();//this won't run, it will output "A" but then A->B(); is not valid 
Смежные вопросы