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 回答