<?php
interface iArea{ // interfejs wymuszający na obiektach go implementujących obsługę metod w nim zadeklarowanych
public function getTop();
public function getBottom();
public function getLeft();
public function getRight();
}
// Tworzenie klasy abstrakcyjnej figura
abstract class Figure implements iArea{ // a tutaj implementacja interfejsu w klasie abstrakcyjnej Figure
private static $nrOfFigures; // ta zmienna statyczna klasy będzie przechowywała liczbę aktualnie utworzonych figur geometrycznych
protected $fillColor;
protected $strokeColor;
public static function getNrOfFigures(){
return self::$nrOfFigures;
}
private $figureName;
public function __construct($fillColor = "#ffffff", $strokeColor = "#000000"){
self::$nrOfFigures ++; // tutaj zwiększam licznik utworzonych figur o 1
$this->fillColor = $fillColor;
$this->strokeColor = $strokeColor;
echo("<p>(Dodawanie) Aktualna liczba utworzonych figur geometrycznych: " . self::$nrOfFigures . "</p>");
}
public function __destruct(){
self::$nrOfFigures --; // tutaj zminiejszam licznik utworzonych figur o 1
echo("<p>(Usuwanie) Aktualna liczba utworzonych figur geometrycznych: " . self::$nrOfFigures . "</p>");
}
public function setFillColor($fillColor){
$this->fillColor = $fillColor;
}
public function setStrokeColor($strokeColor){
$this->strokeColor = $strokeColor;
}
public function getFillColor(){
return $this->fillColor;
}
public function getStrokeColor(){
return $this->strokeColor;
}
abstract public function draw(); // metoda abstrakcyjna rysuj
abstract public function area(); // metoda abstrakcyjna pole powierzchni
abstract public function circuit(); // metoda abstrakcyjna obwód
}
class Circle extends Figure{
protected $xc,
$yc,
$ray;
public function __construct($xc, $yc, $ray, $name = "", $fillColor = "#ffffff", $strokeColor = "#000000"){
parent::__construct($fillColor, $strokeColor);
$this->name = $name;
$this->xc = $xc;
$this->yc = $yc;
$this->ray = $ray;
}
// obsługa metod interfejsu iArea
public function getTop(){
return $this->yc - $this->ray;
}
public function getBottom(){
return $this->yc + $this->ray;
}
public function getLeft(){
return $this->xc - $this->ray;
}
public function getRight(){
return $this->yc + $this->ray;
}
public function draw(){
echo("<p>Koło: xc = " . $this->xc . "; yc = " . $this->yc . "; promień = " . $this->ray . "</p>");
}
public function area(){
return pi() * $this->ray * $this->ray;
}
public function circuit(){
return pi() * 2 * $this->ray;
}
}
class Rectangle extends Figure{
protected $x,
$y,
$width,
$height;
public function __construct($x, $y, $width, $height, $name = "", $fillColor = "#ffffff", $strokeColor = "#000000"){
parent::__construct($fillColor, $strokeColor);
$this->name = $name;
$this->x = $x;
$this->y = $y;
$this->width = $width;
$this->height = $height;
}
// obsługa metod interfejsu iArea
public function getTop(){
if($this->height > 0){
return $this->y;
}
return $this->y + $this->height;
}
public function getBottom(){
if($this->height > 0){
return $this->y + $this->height;
}
return $this->y;
}
public function getLeft(){
if($this->width > 0){
return $this->x;
}
return $this->x + $this->width;
}
public function getRight(){
if($this->width > 0){
return $this->x + $this->width;
}
return $this->x;
}
public function draw(){
echo("<p>Koło: x = " . $this->x . "; y = " . $this->y . "; szerokość = " . $this->width . "; wysokość = " . $this->height . "</p>");
}
public function area(){
return pi() * $this->ray * $this->ray;
}
public function circuit(){
return pi() * 2 * $this->ray;
}
}
?>