b = abs($base);
if ($alcada == 0)
$this->h = $this->b;
else
$this->h = abs($alcada);
self::$qRectanglesCreats++;
self::$qRectanglesQueden++;
}
/**
* Retorna la base del Rectangle
*
* @return int
*/
public function getBase() {
return $this->b;
}
/**
* Retorna l'alçada del Rectangle
*
* @return int
*/
public function getAlcada() {
return $this->h;
}
/**
* Permet assignar la base del Rectangle
*
* @parameter int $base la base del rectangle
*
* @return void
*/
public function setBase($base) {
$this->b = abs($base);
}
/**
* Permet assignar l'alçada del Rectangle
*
* @parameter int $alcada l'alçada del rectangle
*
* @return void
*/
public function setAlcada($alcada) {
$this->h = abs($alcada);
}
/**
* Permet assignar la base i l'alçada del Rectangle a la vegada
*
* @parameter int $base la base del rectangle
*
* @parameter int $alcada l'alçada del rectangle. Si no la passem assigna el mateix que la base
*
* @return void
*/
public function setTamany($base, $alcada=0) {
$this->b = abs($base);
if ($alcada == 0)
$this->h = $b;
else
$this->h = abs($alcada);
}
/**
* Retorna el perímetre del Rectangle
*
* @return int
*/
public function getPerimetre() {
return (2 * ($this->b + $this->h));
}
/**
* Retorna l'àrea del Rectangle
*
* @return int
*/
public function getArea() {
return ($this->b * $this->h);
}
/**
* Retorna el nombre de rectangles que tenim creats i no eliminats
*
* @return int
*/
public static function getQuantsRectanglesQueden() {
return self::$qRectanglesQueden;
}
/**
* Retorna el nombre de rectangles s'han creat des de l'inici
*
* @return int
*/
public static function getQuantsRectanglesCreats() {
return self::$qRectanglesCreats;
}
/**
* Retorna un string per a mostrar per pantalla en texte o html amb les dades del rectangle
*
* @parameter bool $html valor booleà que indica si volem les dades en format texte (cert) o html (fals).
* En cas de no passar el paràmetre, s'entén que és false.
*
* @return string
*/
public function mostraDades($html=false) {
if ($html)
$return = "
\n";
else
$return = "\n";
echo "*** " . get_class($this) . $return;
echo "************************************************" . $return;
echo "Base : " . $this->getBase() . $return;
echo "Alcada : " . $this->getAlcada() . $return;
echo "Perimetre : " . $this->getPerimetre() . $return;
echo "Area : " . $this->getArea() . $return;
echo "************************************************" . $return;
}
/*
* Funció que s'executa al eliminar o deixar de tenir assignat un Rectangle.
* Mostra un missatge dien que s'ha mort.
*
* @return void
*/
public function __destruct() {
echo "M'he mort " . get_class($this) . " --> " . $this->getBase() . " x " . $this->getAlcada() . "\tQuedem " . --self::$qRectanglesQueden . "\n";
}
}
/**
* Aquesta classe representa un punt (x,y) d'un color determinat
*/
Class Dibuixable {
/** @var int Representa el valor x de l'eix de coordenades */
public $x;
/** @var int Representa el valor y de l'eix de coordenades */
public $y;
/** @var int Representa el color del punt. */
public $color;
/**
*
* Inicialitza el rectangle a partir d'una base i alçada.
* En cas de no passar alçada aquesta serà la mateixa que la base
* En cas de no passar la base aquesta serà 10
*
* @parameter int $base representa la base. En cas de no posar-hi valor serà 10
*
* @parameter int $alcada representa l'alçada. En cas de no posar-hi valor serà el mateix que la base
*
* @return Dibuixable
*/
public function __construct($posX = 0, $posY = 0, $quinColor = 0) {
$this->x = $posX;
$this->y = $posY;
$this->color = $quinColor;
}
/**
* Assignem color
*
* @return void
*/
public function setColor($quinColor) {
$this->color = $quinColor;
}
/**
* Retorna les dades del Dibuixable en format string.
*
* @param bool $html Indica si volem el retorn en format **html** o **txt**
*
* Quan el valor és true, el resultat serà en *html*
*
* Quan el valor és false, el resultat serà en *txt*
*
* @return string
*/
public function mostraDades($html=false) {
if ($html)
$return = "
\n";
else
$return = "\n";
echo "*** " . get_class($this) . $return;
echo "************************************************" . $return;
echo "(x, y): (" . $this->x . ", " . $this->y . ")" . $return;
echo "Color : #" . substr("000000".dechex($this->color), -6) . $return;
echo "************************************************" . $return;
}
}
echo "Total de rectangles creats: " . Rectangle::getQuantsRectanglesCreats() . "\n";
echo "Total de rectangles creats: " . Rectangle::getQuantsRectanglesQueden() . "\n";
$r = new Rectangle(4,3);
$r->mostraDades();
$d = new Dibuixable(3,5,255);
$d->mostraDades();
$d->setColor(0x00ff00);
$d->mostraDades();
echo "Total de rectangles creats: " . Rectangle::getQuantsRectanglesCreats() . "\n";
for($i = 1; $i < 10; $i++)
$s[] = new Rectangle($i,$i*2);
echo "Total de rectangles creats: " . $s[0]::getQuantsRectanglesCreats() . "\n";
$s = null;
echo "Total de rectangles queden: " . Rectangle::getQuantsRectanglesQueden() . "\n";
echo "Total de rectangles creats: " . Rectangle::getQuantsRectanglesCreats() . "\n";
$r1 = new Rectangle();
$r2 = new Rectangle();
$r3 = new Rectangle(2,3);
echo "r1 == r2 : " . (($r1 == $r2)?"SI":"NO") . "\n";
echo "r1 === r2 : " . (($r1 === $r2)?"SI":"NO") . "\n";
echo "r1 == r3 : " . (($r1 == $r3)?"SI":"NO") . "\n";
echo "r1 === r3 : " . (($r1 == $r3)?"SI":"NO") . "\n";
$r1 = $r3;
echo "Agignem r1 = r3 \n";
echo "r1 == r3 : " . (($r1 == $r3)?"SI":"NO") . "\n";
echo "r1 === r3 : " . (($r1 == $r3)?"SI":"NO") . "\n";
?>