Created
January 21, 2013 22:05
-
-
Save rssilva/4589935 to your computer and use it in GitHub Desktop.
First 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 | |
//vamos criar uma classe Robot, que tem certos atributos | |
class Robot { | |
public $nome = ''; //um nome que também pode ser um número de série | |
public $bracos = 0; //quantidade de braços | |
public $rodas = 0; //quantidade de rodas | |
public $aparencia = ''; //aparencia, porque o robô pode parecer com alguma coisa | |
public $alinhamento = ''; //alinhamento, se é bom, mau ou neutro, ou misturas disso | |
public $armas = array(); //lista de armas que ele possui | |
public $altura = 0; //altura do robô | |
public $asas = 0; //quantidade de asas | |
public $fonteDeEnergia = 100; //porcentagem da fonte de energia que alimenta o bicho | |
//aqui temos um método que é usado toda vez que o robo gasta energia | |
//para realizar as ações ele precisa retirar energia de algum lugar | |
//esse método recebe um parâmetro (em porcentagem) de quanto deve | |
//ser subtraído dessa fonteDeEnergia | |
public function gastarEnergia ($quantidade) { | |
$this--->fonteDeEnergia -= $quantidade; | |
} | |
} | |
//Os transformers são robôs metamorfos que caíram na Terra vindos do planeta Cybertron | |
//ao chegarem aqui, assumiram formas de carros/caminhões/trens para poderem | |
//ficar disfarçados entre os humanos | |
class Transformer extends Robot { | |
public $transformado = false; //presumimos que a forma default dele seja a de um robô, não de um carro/avião/tanque | |
public $formaDefault = 'Robo Gigante'; //todos eles tem a forma "normal" de um robô gigante | |
public $formaDisfarcado = ''; //Como a forma quando está disfarçado varia de cada um, vamos deixar em branco | |
//o método transformar checa o valor da variavel transformado, se for verdadeira | |
//troca para falso e passa a aparencia para a forma default. | |
//se ele não estiver transformado, troca a aparencia para a forma disfarçado | |
//Veja que aparencia é herdada da classe pai. Porque todo robô tem uma aparência | |
//nem que seja de uma simples garra mecânica! | |
//Esse método também chama gastarEnergia, um método herdado da classe pai | |
//responsável por diminuir a energia do percentual de bateria disponível | |
public function transformar () { | |
if ($this->transformado) { | |
$this->transformado = false; | |
$this->aparencia = $this->formaDefault; | |
$this->gastarEnergia(0.001); | |
} else { | |
$this->transformado = true; | |
$this->aparencia = $this->formaDisfarcado; | |
$this->gastarEnergia(0.001); | |
} | |
} | |
} | |
//Os Autobots são a turma "do bem" nesse desenho/filme/brinquedo | |
//A única propriedade sendo atribuída nos autobots é o alinhamento | |
class Autobot extends Transformer { | |
public $alinhamento = 'ordeiro e bom'; //sabemos que todo Autobot é gente boa | |
} | |
//Bumblee será um objeto Autobot | |
//setaremos nome, braços, rodas e formaDisfarcado | |
$BumbleBee = new Autobot(); | |
$BumbleBee->nome = 'BumbleBee'; | |
$BumbleBee->bracos = '2'; | |
$BumbleBee->rodas = '4'; | |
$BumbleBee->formaDisfarcado = 'Camaro Amarelo'; | |
//vemos que aqui a aparência de BumbleBee ainda não foi setada. | |
//isso é péssimo para o conceito de OO. | |
//Digamos que é importante para um robô ter uma forma | |
//então quando estamos criando objetos, é importante que ele tenha uma aparencia | |
//Poderíamos ter atribuído o valor diretamente à variável, mas não seria elegante | |
//vamos guardar essa questão para quando virmos construtos | |
var_dump($BumbleBee->aparencia); //string(0) "" | |
echo "<br>";//adicionamos duas quebras de linha para ficar mais claro | |
//A fonte de energia está no nível máximo | |
var_dump($BumbleBee->fonteDeEnergia); //int(100) | |
$BumbleBee->transformar(); //vamos mudar a forma | |
echo "<br>"; | |
//Depois da transformação, ele assume a forma do Camaro Amarelo | |
var_dump($BumbleBee->aparencia);//string(14) "Camaro Amarelo" | |
echo "<br>"; | |
//O percentual de energia foi diminuído com a transformação | |
var_dump($BumbleBee->fonteDeEnergia); //float(99.999) | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment