Skip to content

Instantly share code, notes, and snippets.

@rssilva
Last active December 11, 2015 07:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rssilva/4568418 to your computer and use it in GitHub Desktop.
Save rssilva/4568418 to your computer and use it in GitHub Desktop.
The second part of my post about OO in PHP on dailydevtips.com
<?php
class Humano {
public $nome = '';
public $idade = 0;
public $saudacao = '';
private $apelido = '';
private $acordado = true; //observe que $acordado é uma propriedade privada
//esse método é chamado quando o objeto é instanciado
//usado para atribuir propriedades e chamar métodos
//já na inicialização deste
function __construct ($nome, $idade) {
$this->nome = $nome;
$this->idade = $idade;
}
//setSaudacao muda a saudação do usuário
public function setSaudacao ($saudacao) {
$this->saudacao = $saudacao;
}
//getSaudacao imprime a saudação na tela
public function getSaudacao () {
echo $this->saudacao;
}
//Checa hora de dormir chama o método privado checarHoras
//quando a hora é um valor entre meia-noite e seis da manhã
//é impressa a frase 'that's all folks, vou dormir' e muda-se
//a propriedade acordado para false
public function checaHoraDormir () {
$hora = $this->checarHoras();
if ($hora > 0 && $hora < 6) {
echo "that's all folks, vou dormir";
$this->acordado = false;
}
}
//o método acordar muda a propriedade acordado para true
public function acordar () {
$this->acordado = true;
}
//retorna o valor do horário usando a função date()
private function checarHoras () {
$time = date('H');
return $time;
}
}
$Carlos = new Humano('Carlos', 35);
$Carlos->setSaudacao('Ola, meu nome eh '.$Carlos->nome);
var_dump($Carlos);
//Vemos que var_dump do objeto Carlos mostra algo como
//object(Humano)#1 (5) { ["nome"]=> string(6) "Carlos" ["idade"]=> int(35)
//["saudacao"]=> string(23) "Ola, meu nome eh Carlos" ["apelido":"Humano":private]=> string(0) ""
//["acordado":"Humano":private]=> bool(true) }
//Apesar de mostrar as propriedades privadas,
//ao tentarmos acessá-la durante a execução do script,
//temos um erro
echo $Carlos->apelido; //exclua essa linha depois ;)
//Fatal error: Cannot access private property Humano::$apelido in (caminho do arquivo)
$Carlos->getSaudacao();
$Carlos->checaHoraDormir();
class Ninja extends Humano{
//um bom ninja não tem nome. Veja que a propriedade foi
//deletada no construtor junto com $idade. Ou seja,
//não temos como acessá-las
private $acordado = true;
function __construct () {
//unset 'deleta' o método ou propriedade
//ou seja, ao instanciar um Ninja, estamos excluindo esses métodos
//herdados da classe pai
unset($this->nome);
unset($this->idade);
unset($this->setSaudacao); //um ninja não saúda ninguém, logo não podemos mudar a propriedade
unset($this->getSaudacao);
unset($this->checaHoraDormir); //um ninja não dorme! :)
}
private function checarHoras () {
$time = date('H');
return $time;
}
}
$ninja1 = new Ninja();
var_dump($ninja1);
//object(Ninja)#2 (4) { ["acordado":"Ninja":private]=> bool(true) ["saudacao"]=> string(0) ""
//["apelido":"Humano":private]=> string(0) "" ["acordado":"Humano":private]=> bool(true) }
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment