<< Click to Display Table of Contents >> Heranca |
![]() ![]() ![]() |
require __DIR__ . '/classes/autoload.php';
$pessoa = new classes\model\Pessoa("Junior", "RG", new DateTime("1977-07-02"));
// 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");
var_dump($pessoa, $cliente, $fornecedor);
// cada um chama seu método
echo $pessoa->getDescricao()."<br>";
echo $cliente->getDescricao()."<br>";
echo $fornecedor->getDescricao()."<br>";
SAIDA
object(classes\model\Pessoa)[2]
private 'nome' => string 'Junior' (length=6)
private 'doc' => string 'RG' (length=2)
private 'data' =>
object(DateTime)[3]
public 'date' => string '1977-07-02 00:00:00.000000' (length=26)
public 'timezone_type' => int 3
public 'timezone' => string 'America/Sao_Paulo' (length=17)
object(classes\model\Cliente)[4]
private 'nome' (classes\model\Pessoa) => string 'Junior' (length=6)
private 'doc' (classes\model\Pessoa) => string 'RG' (length=2)
private 'data' (classes\model\Pessoa) =>
object(DateTime)[5]
public 'date' => string '1977-07-02 00:00:00.000000' (length=26)
public 'timezone_type' => int 3
public 'timezone' => string 'America/Sao_Paulo' (length=17)
object(classes\model\Fornecedor)[6]
private 'fone' => string '48 9999-2222' (length=12)
private 'nome' (classes\model\Pessoa) => string 'Junior' (length=6)
private 'doc' (classes\model\Pessoa) => string 'RG' (length=2)
private 'data' (classes\model\Pessoa) =>
object(DateTime)[7]
public 'date' => string '1977-07-02 00:00:00.000000' (length=26)
public 'timezone_type' => int 3
public 'timezone' => string 'America/Sao_Paulo' (length=17)
Junior, documento: RG em Sat-Jul-1977
CLIENTE Junior, documento: RG em Sat-Jul-1977
FORNECEDOR: Junior, documento: RG em Sat-Jul-1977 FONE: 48 9999-2222
namespace classes\model;
class Pessoa {
private $nome;
private $doc;
private $data;
// a "\" é pq a classe é default do php e não faz parte do namespace
public 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");
}
}
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();
}
}
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;
}
}