Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

visitante_php

herança no PHP5

Recommended Posts

eu gostaria de criar uma classe com herança de outra, mas gostaria de evitar q herdasse certos metodo, tem como fazer isso?

 

Sim, você deverá definir o método como private, veja: http://br.php.net/manual/en/language.oop5.visibility.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu gostaria de criar uma classe com herança de outra, mas gostaria de evitar q herdasse certos metodo, tem como fazer isso?

 

Então não é herança! :)

 

A herança, por definição, vai "levar" todos os métodos, o que você pode é definir visibilidades diferentes.

http://br.php.net/manual/pt_BR/language.oop5.visibility.php

 

Qual seria o objetivo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas se eu definir como private estes metodos, eu nao poderei usa-los fora da propria classe...

 

Amigo, então está havendo uma confusão aqui.

 

Ou você permite que os métodos sejam acessados de fora da classe com public, ou você permite que apenas a classe que o criou e suas derivadas acessem esses métodos com protected ou você não permite que ninguém (a não ser a classe que o criou) os veja, com o private.

 

Talvez, se você disser o seu problema, fica mais fácil indicar uma solução.

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu gostaria de criar uma classe com herança de outra, mas gostaria de evitar q herdasse certos metodo, tem como fazer isso?

 

 

 

Cara, o que você pode fazer é dividir suas classes em classes mais especificas, imagina que eu tenha isso:

 

<?php

class Animal {
	public function Correr();
}

class Vaca extends Animal {
	public function Mugir();
}

 

Mas você quer evitar que Vaca tenha o metodo Correr (afinal vaca não corre). Então eu divido minhas classes em outras mais genericas e outras mais especializadas, seguindo uma ideia semelhante a esta abaixo:

 

<?php

abstract class Animal {
	public function Comer();
}

class AnimalRapido extends Animal {
	public function Correr();
}

class AnimalLento extends Animal {
	public function Andar();
}

class Vaca extends AnimalLento {
	public function Mugir();
}

class Cachorro extends AnimalRapido {
	public function Latir();
}

Pelo menos é isso que eu faria para evitar a herança de certos metodos que não entram no contexto da classe filha.

Compartilhar este post


Link para o post
Compartilhar em outros sites

se for o q eu entendi, eh o seguinte

eu to construindo um framework de uso proprio

 

eu implantei um active record, so q no metodo load, tem mais 2 parametros opcionais, onde eu posso colocar um criterio, isso deixa a classe proxima do padrao repository, entao, eu keria criar uma classe repository, mas q nao herdade os metodos de insert e update, so o de load e o de delete, e acrescentar os outros do repository....esta eh a real situacao....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Com a declaração final o seu método não poderá ser sobrescrito, mas a herança continua ocorrendo.

Acho que o seu "problema" é mais simples de resolver com visibilidade.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ae vamos supor, eu tenho o metodos de inserir e atualizar, e eu colocando como private, eu nao poderei utilia-los fora da classe...

 

Exatamente, você não poderá invocar estes métodos fora da classe.

 

Ps.: Talvez o problema esteja no projeto (modelagem, design).

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.