<< Click to Display Table of Contents >> Abstratos |
![]() ![]() ![]() |
require __DIR__ . '/classes/autoload.php';
// cria as filhas de "Pessoa":
$cliente = new classes\model\Cliente("Junior", "RG", new DateTime("1977-07-02"));
$fornecedor = new classes\model\Fornecedor("Junior", "RG", new DateTime("1977-07-02"), "48 9999-2222");
// cada um chama seu método
echo $cliente->getDescricao()."<br>";
echo $fornecedor->getDescricao()."<br>";
$cliente->falar();
Saída
CLIENTE Junior, documento: RG em Sat-Jul-1977
FORNECEDOR: Junior, documento: RG em Sat-Jul-1977 FONE: 48 9999-2222
Oi, eu sou um classes\model\Cliente
namespace classes\model;
// abstract = não pode instanciar esse classe, só a filha
abstract class Pessoa {
protected $nome;
protected $doc;
protected $data;
protected function __construct($nome, $doc, \DateTime $data) {
$this->nome = $nome;
$this->doc = $doc;
$this->data = $data;
}
public function getData(): \DateTime {
return $this->data;
}
public function getDescricao() {
return $this->nome . ", documento: " . $this->doc . " em " . $this->data->format("D-M-Y");
}
// DEVERÁ será implementado nas filhas
abstract public function falar();
}
namespace classes\model;
class Cliente extends Pessoa {
public function __construct($nome, $doc, \DateTime $data) {
// executa o construtor do "pai"
parent::__construct($nome, $doc, $data);
}
public function getDescricao() {
// retorna a descricao do "pai"
return "CLIENTE ".parent::getDescricao();
}
public function falar() {
echo "<p>Oi, eu sou um ".__CLASS__."</p>";
}
}
namespace classes\model;
class Fornecedor extends Pessoa {
private $fone;
public function __construct($nome, $doc, \DateTime $data, $fone) {
// executa o construtor do "pai"
parent::__construct($nome, $doc, $data);
$this->fone = $fone;
}
public function getDescricao() {
// retorna a descricao do "pai"
return "FORNECEDOR: ".parent::getDescricao()." FONE: ".$this->fone;
}
public function falar() {
echo "<p>Oi, eu sou um ".__CLASS__."</p>";
}
}