Define abstract class and provide implementation in PHP
Description
The following code shows how to define abstract class and provide implementation.
Example
/* w w w . jav a2 s .c o m*/
<?php
//abstract root class
abstract class Shape
{
abstract function getArea();
}
//abstract child class
abstract class Polygon extends Shape
{
abstract function getNumberOfSides();
}
//concrete class
class Triangle extends Polygon
{
public $base;
public $height;
public function getArea()
{
return(($this->base * $this->height)/2);
}
public function getNumberOfSides()
{
return(3);
}
}
//concrete class
class Rectangle extends Polygon
{
public $width;
public $height;
public function getArea()
{
return($this->width * $this->height);
}
public function getNumberOfSides()
{
return(4);
}
}
//concrete class
class Circle extends Shape
{
public $radius;
public function getArea()
{
return(pi() * $this->radius * $this->radius);
}
}
//concrete root class
class Color
{
public $name;
}
$myCollection = array();
//make a rectangle
$r = new Rectangle;
$r->width = 5;
$r->height = 7;
$myCollection[] = $r;
unset($r);
//make a triangle
$t = new Triangle;
$t->base = 4;
$t->height = 5;
$myCollection[] = $t;
unset($t);
//make a circle
$c = new Circle;
$c->radius = 3;
$myCollection[] = $c;
unset($c);
//make a color
$c = new Color;
$c->name = "blue";
$myCollection[] = $c;
unset($c);
foreach($myCollection as $s)
{
if($s instanceof Shape)
{
print("Area: " . $s->getArea() . "<br>\n");
}
if($s instanceof Polygon)
{
print("Sides: " . $s->getNumberOfSides() . "<br>\n");
}
if($s instanceof Color)
{
print("Color: $s->name<br>\n");
}
print("<br>\n");
}
?>
The code above generates the following result.