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 />"; 


}
?>
4

3 に答える 3

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メソッドをチェーンするには戻る必要があります。

于 2012-05-31T15:35:06.817 に答える
0

メソッドをチェーンしたい場合は、チェーンするメソッドに戻る必要があり$thisます。

于 2012-05-31T15:33:13.423 に答える
-2

代わりに書いてみてください

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

それ :

printf('%s says %s %s',@animal->name,$animal->speak()->likes());
于 2012-05-31T15:49:45.423 に答える