Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal, recebi um seguinte desafio... alguém saberia como fazer?
>
Citar
Dado o exemplo abaixo:
<?php
class Monstro {
private $ataque, $vida;
public function __construct($data){
$this->ataque = isset($data['ataque']) ? $data['ataque'] : 0;
$this->vida = 100;
}
public function getAtaque(){
return $this->ataque;
}
public function getVida(){
return $this->vida;
}
public function setVida($vida){
$this->vida = $vida;
}
public function toString(){
echo "<pre>";
print_r($this);
echo "</pre>";
}
}
$monstro1 = new Monstro(array('ataque'=>rand(10,100)));
echo $monstro1->toString();Amoeba que estende de monstro, e que contenha o nome da amoebaOBS: Informe com um comentário qual parte esta sendo feita no respectivo trecho
Exemplo:
// 1. Tenha uma nova Class chamada `Amoeba`, que contenha o nome da amoeba
class Amoeba ...Seguinte, consegui criar os nomes para cada amoeba, porém não consigo definir os valores de ataques para tal amoeba vindo do monstro:
<?php
class Monstro {
private $ataque, $vida;
public function __construct($data){
$this->ataque = isset($data['ataque']) ? $data['ataque'] : 0;
$this->vida = 100;
}
public function getAtaque(){
return $this->ataque;
}
public function getVida(){
return $this->vida;
}
public function setVida($vida){
$this->vida = $vida;
}
public function toString(){
echo "<pre>";
print_r($this);
echo "</pre>";
}
} private $nomeAmoeba;
public function __construct($data){
$this->nomeAmoeba = $data['nomeAmoeba'];
}
}
$monstro1 = new Monstro(array('ataque'=>rand(10,100)));
$amoeba1 = new Amoeba(array('nomeAmoeba'=>"Mateus"));
$amoeba2 = new Amoeba(array('nomeAmoeba'=>"PXP"));
echo $monstro1->toString();
echo $amoeba1->toString();
echo $amoeba2->toString();
?>Certo, agora é um novo conceito que você deve aprender, que é o conceito de herança.
Quando uma classe "extende" (extends) outra, ela herda todas as características da classe que está "extendendo" e se torna uma "especialização" da classe base.
Ou seja, a classe Monstro é a classe base (pode ser chamada de classe pai) e a classe Amoeba é a classe especialista (pode ser chamada de classe filha) da classe Monstro. Isso significa que além de ser uma Amoeba (especialista) ela é também um Monstro (base).
Dentro dessa herança, todos os métodos públicos e privados da classe Monstro estão disponíveis para a classe Amoeba e isso inclui o construtor. Entretanto, você deve utilizar esse construtor da forma correta.
A classe Amoeba está criada corretamente em quase sua totalidade, apenas é necessário acessar o construtor da classe base/pai.
class Amoeba extends Monstro {
private $nomeAmoeba;
public function __construct($data) {
//chamando o construtor da classe pai e passando o parâmetro corretamente
parent::__construct($data);
$this->nomeAmoeba = $data['nomeAmoeba'];
}
}
Quando for utilizar a classe Amoeba, não é necessário criar uma classe Monstro, apenas criar diretamente a classe Amoeba:
$amoeba1 = new Amoeba(['ataque' => rand(10,100) , 'nomeAmoeba' => "Mateus"]);
$amoeba2 = new Amoeba(['ataque' => rand(10,100) , 'nomeAmoeba' => "PXP"]);
echo $amoeba1->toString();
echo $amoeba2->toString();Exatamente o que eu precisava!!
Agora acredito que a última questão sobre...
Como posso fazer um comparação? Por exemplo, amoeba 1 tem um ataque maior que a amoeba 2?
Você pode recuperar o tamanho do ataque de cada um usando o método getAtaque() e recuperar o total de pontos de vida usando o método getVida(). Depois, pode subtrair os pontos de vida setando novos pontos de vida usando o método setVida.
Após isso, é só comparar com getVida() novamente.
Isso eu entendi, porém não vejo com estanciar cada amoeba e fazer essa comparação...
No último código que eu postei, as duas Amoebas já estão instânciadas, agora é só utilizá-las.
Consegui! Obrigado.
Certo, qual a sua dúvida?