Abstratos

<< Click to Display Table of Contents >>

Navigation:  Objetos >

Abstratos

Previous pageReturn to chapter overviewNext page

 

Principal.php

 

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

 

Pessoa.php

 

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();
}

 

Cliente.php

 

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>";
    }
}

 

Fornecedor.php

 

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>";
    }    
}