<< Click to Display Table of Contents >> Validando propriedades e metodos |
![]() ![]() ![]() |
2 arquivos
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($preco, 2, ",", ".");
}
private function naoEncontrado($metodo, $nome) {
echo "<p>{$metodo}: A propriedade <b>{$nome}</b> não existe em " . __CLASS__ . "</p>";
}
}
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);
__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