Validando propriedades e metodos

<< Click to Display Table of Contents >>

Navigation:  Objetos >

Validando propriedades e metodos

Previous pageReturn to chapter overviewNext page

2 arquivos

 

Produto.php

 

namespace classes\model;
 
class Produto {
 
    public $nome;
    private $preco;
    private $data;
 
    // isso aqui vai mostrar um erro sempre que for tentado
    // setar uma propriedade que não existe -- é importante
    // para enviar erro de digitação
    public function __set($name$value) {
        $this->naoEncontrado(__FUNCTION__$name);
        echo "<p>Valor: {$value}</p>";
    }
 
    // se tentar obter uma propriedade que não existe
    // esse método é executado informando erro
    public function __get($name) {
        $this->naoEncontrado(__FUNCTION__$name);
    }
 
    // é chamado sempre que é testado uma propriedade
    // com o método isset($class->prop)
    public function __isset($name) {
        $this->naoEncontrado(__FUNCTION__$name);
    }
 
    // se chamar uma função que não existe ou não é pública
    // isso aqui será chamado
    public function __call($name$arguments) {
        $this->naoEncontrado(__FUNCTION__$name);
        var_dump($arguments);
    }
 
    // normal:
    public function __toString() {
        return $this->nome . " R$ " . $this->preco;
    }
 
    // esse é executado quando chama o unset($var) com propridade
    // inválida ou privado
    public function __unset($name) {
        $this->naoEncontrado(__FUNCTION__$name);
    }
 
    public function handler($nome$preco) {
        $this->nome = $nome;
        $this->preco = number_format($preco2","".");
    }
 
    private function naoEncontrado($metodo$nome) {
        echo "<p>{$metodo}: A propriedade <b>{$nome}</b> não existe em " . __CLASS__ . "</p>";
    }
}

 

Principal.php

 

require __DIR__ . '/classes/autoload.php';
 
// cria o objeto para teste
$prod = new classes\model\Produto();
$prod->handler("DVD Heroico"1000.233);
 
// tenta setar uma propriedade que não existe
$prod->nome = "DVD Dramático";
$prod->estilo = "drama";
 
// tenta acessar uma propriedade que não existe
echo $prod->propriedade_nao_existe;
 
 
// tenta validar uma propriedade que existe
if (isset($prod->nome)) {
    echo "isset nome OK";
}
 
// tenta validar uma propriedade que NÃO existe
if (isset($prod->outra_propridade)) {
    echo "isset nome OK";
}
 
// tenta chamar uma função que nao existe
$prod->naoExiste("A""B");
 
// tenta chamar uma função PRIVATE
$prod->naoEncontrado("A""B");
 
// toString()
echo "<p>{$prod}</p>";
 
// tentar unsetar uma propriedade que não existe ou privada
unset($prod->naotem);
 
var_dump($prod);

 

Saída

 

__set: A propriedade estilo não existe em classes\model\Produto

Valor: drama

__get: A propriedade propriedade_nao_existe não existe em classes\model\Produto

isset nome OK

__isset: A propriedade outra_propridade não existe em classes\model\Produto

__call: A propriedade naoExiste não existe em classes\model\Produto

D:\xampp\htdocs\netbeans\classes\model\Produto.php:35:
array (size=2)
  0 => string 'A' (length=1)
  1 => string 'B' (length=1)

__call: A propriedade naoEncontrado não existe em classes\model\Produto

D:\xampp\htdocs\netbeans\classes\model\Produto.php:35:
array (size=2)
  0 => string 'A' (length=1)
  1 => string 'B' (length=1)

DVD Dramático R$ 1.000,23

__unset: A propriedade naotem não existe em classes\model\Produto

D:\xampp\htdocs\netbeans\aqui.php:39:
object(classes\model\Produto)[2]
  public 'nome' => string 'DVD Dramático' (length=14)
  private 'preco' => string '1.000,23' (length=8)
  private 'data' => null