Ir para o conteúdo
AJBM

Herança

Mensagens Recomendadas

AJBM

Boas!

Eu tenho uma classe Pessoa

class Pessoa {

protected $codigo;
private $nome;
private $morada;
private $dataNascimento;


function __construct($codigo, $nome, $morada, $dataNascimento) {
	$this->setCodigo($codigo);
	$this->setNome($nome);
	$this->setMorada($morada);
	$this->setDataNascimento($dataNascimento);
}

public function getCodigo() {
	return $this->codigo;
}
public function setCodigo($codigo) {
	$this->codigo = $codigo;
}
public function getNome() {
	return $this->nome;
}
public function setNome($nome) {
	$this->nome = $nome;
}
public function getMorada() {
	return $this->morada;
}
public function setMorada($morada) {
	$this->morada = $morada;
}
public function getDataNascimento() {
	return $this->dataNascimento;
}
public function setDataNascimento($dataNascimento) {
	$this->dataNascimento = $dataNascimento;
}
public function __toString() {


	return "Nome: ".$this->getNome()." Morada: ".$this->getMorada();

}

}

e uma classe aluno

class Aluno extends Pessoa {


function __construct($codigo, $nome, $morada, $dataNascimento) {

	parent::__construct($codigo, $nome, $morada,$dataNascimento);

}


public function setCodigo($codigo) {
   if(strlen($codigo)==7)
	 $this->codigo=$codigo;

}


}

Eu tenho que fazer uma restrição ao tamanho do código do aluno, eu só consigo fazer essa restrição se a variável código em pessoa for protected,mas no meu exercício diz que todas as variáveis tem de ser privadas. Alguém me pode ajudar

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
yoda

A classe Aluno tem de herdar todos os métodos da classe Pessoa? Podias fazer assim :

class Pessoa
{
public function _setCodigo($codigo)
{
 if(strlen($codigo)==7)
 {
  $this->codigo = $codigo;
 }
}
}
class Aluno extends Pessoa
{
public function setCodigo($codigo)
{
return $this->_setCodigo($codigo);			
}
}

Outra pergunta : se o código é do aluno, porque é que o mesmo é declarado dentro da classe Pessoa?

Editado por yoda

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
AJBM

No meu exercício o código também é um atributo de pessoa, mas a restrição do tamanho só é para o aluno.

O _setCodigo não funciona Fatal error: Call to undefined method Aluno::_setCodigo() in C:\xampp\htdocs\PAW_Ficha6_ex1\Aluno.php on line 28

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
AJBM

ok.

O que tu estas a sugerir e eu criar 2 set() em pessoa certo? um com restrição de caracteres e outro sem restrição. Mas não existe outra solução?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
yoda

Acho que podes classificar a classe Aluno como um driver da classe Pessoa, pois vai precisar herdar os mesmos métodos da pessoa mas por se tratar de um aluno precisa controlar o output desses métodos.

O que sugeri foi renomear as funções da classe Pessoa de forma a poder mascarar publicamente (quando instancias a classe) que estás a usar métodos da classe pai. É um método usado por exemplo por classes de acesso à base de dados que necessitem de um interface generalista e opção para vários drivers (mysql, postgree, etc). Foi a primeira coisa que me ocorreu, pode ser que haja outra alternativa.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.