Last active
December 11, 2015 07:48
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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