Any class that contains one or more abstract methods must itself be declared as abstract.
An abstract class cannot be instantiated
A class that extends the abstract class must implement the abstract methods of the parent class or itself be declared as abstract.
abstract class Animal{
function __construct($name='No-name', $breed='unknown', $price = 15) {
$this->name = $name;
$this->breed = $breed;
$this->price = $price;
}
function setName($name) {
$this->name = $name;
}
function setBreed($breed){
$this->breed = $breed;
}
function setPrice($price) {
$this->price = $price < 0 ? 0 : $price;
}
function getName() {
return $this->name;
}
function display() {
printf("%s is a %s and costs \$%.2f.
\n", $this->name, $this->breed, $this->price);
}
public static $type = "animal";
public static function fly($direction = 'around') {
printf("Flying %s.
\n", $direction);
}
abstract public function birdCall();
}
class Parrot extends Animal {
public function birdCall($singing=FALSE) {
$sound = $singing ? "twitter" : "chirp";
printf("%s says: *%s*
\n", $this->getName(), $sound);
}
}
?>