AJBM Posted March 27, 2013 at 03:56 PM Report #500590 Posted March 27, 2013 at 03:56 PM 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
yoda Posted March 27, 2013 at 04:12 PM Report #500594 Posted March 27, 2013 at 04:12 PM (edited) 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 March 27, 2013 at 04:22 PM by yoda before you post, what have you tried? - http://filipematias.info sense, purpose, direction
AJBM Posted March 27, 2013 at 04:21 PM Author Report #500595 Posted March 27, 2013 at 04:21 PM 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
yoda Posted March 27, 2013 at 04:22 PM Report #500596 Posted March 27, 2013 at 04:22 PM Enganei-me a escrever o nome da classe, já editei. before you post, what have you tried? - http://filipematias.info sense, purpose, direction
AJBM Posted March 27, 2013 at 04:30 PM Author Report #500598 Posted March 27, 2013 at 04:30 PM 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?
yoda Posted March 27, 2013 at 04:52 PM Report #500600 Posted March 27, 2013 at 04:52 PM 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. before you post, what have you tried? - http://filipematias.info sense, purpose, direction
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now