Jump to content
AJBM

Herança

Recommended Posts

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

Share this post


Link to post
Share on other 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?

Edited by yoda

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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?

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.