2012-05-31 2 views
0

У меня есть следующий класс, и я хочу реализовать методы цепочки. Я как бы участвую в себе, поэтому я подумал, что было бы просто проверить цепочку. Однако это не сработало. Что мне нужно сделать, чтометоды цепочки, которые необходимо изменить в классе

echo $animal->name.' says'.$animal->speak()->likes()."<br />"; 

вот мой полный код

<?php 
class Animal{ 

    var $name; 
    function __construct(){ 

     $this->name = $name; 

    } 

} 


class Dog extends Animal{ 


    public function speak(){ 

     return "Woof Woof"; 


    } 
    public function likes(){ 

     return "steaks"; 


    } 

} 

class Cat extends Animal{ 

    public function speak(){ 

     return "Meow Meow"; 

    } 

    public function likes(){ 

     return "tuna"; 

    } 

} 

$animals = array(new Dog('skippy'), new Cat('snowball')); 
foreach($animals as $animal){ 
    echo $animal->name.' says'.$animal->speak()->likes()."<br />"; 


} 
?> 

ответ

2
<?php 
class Animal { 
    function speak() { 
    echo "Random Noise!\n"; 
    return $this; 
    } 
} 

class Dog extends Animal { 
    function bark() { 
    echo "bark!\n"; 
    return $this; 
    } 
} 
$a = new Dog(); 
$a->speak()->bark(); 

Чтобы связать свои методы, вам необходимо вернуть $this.

0

Если вы хотите цепным способом, вам нужно вернуть $this в методе для построения цепочки.

-2

попытаться написать вместо

echo $animal->name.' says'.$animal->speak()->likes()."<br />"; 

что:

printf('%s says %s %s',@animal->name,$animal->speak()->likes()); 
Смежные вопросы