Ir para conteúdo

POWERED BY:

Arquivado

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

SirSmart

Interface

Recommended Posts

Sim o uso de interface é aceita também no php 5.*

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aí vai um exemplo, a parte do controller está para oracle, mas dá pra mudar pra mysql tranquilo:

 

Model:

<?  /**  * Classe referente a tabela Localidade  *  * @author <>  * @version <>  */  class Localidade {	private $codigo;	private $nome;	/** 	* Construtor da classe 	*/	function __construct(){	  $this->codigo = '';	  $this->nome = '';	}	/**	* Seta	* @param number $codigo	*/	function setCodigo($codigo){	  $this->codigo = $codigo;	}	/**	* Seta	* @param varchar2 $nome	*/	function setNome($nome){	  $this->nome = $nome;	}	/**	* Recupera  	* @return number $codigo	*/	function getCodigo(){	  return $this->codigo;	}	/**	* Recupera  	* @return varchar2 $nome	*/	function getNome(){	  return $this->nome;	}  }?>

Interface:

<?  /**  * Define interface para a classe Localidade  * @author <>  * @version <>  */  interface LocalidadeInterface {	  public function insert($Localidade);	  public function update($Localidade);	  public function delete($codigo);	  public function select($Localidade);  }?>

Controller:

<?  /**  * Classe responsavel pelas transacoes do modulo Localidade.  *  * @author <>  * @version <>  */  class LocalidadeDAO implements LocalidadeInterface {	/**	* Metodo responsavel pela insercao de dados	* @param  object $objLocalidade	* @return boolean true se inserido, false caso contrario	*/	function insert($objLocalidade){	  $conexao = new ConexaoBancoDados(DB_USUARIO, DB_SENHA, DB_HOST,DB_SERVER);		  $objMsg	 = new Msg(); 		  $objUtils   = new Utils();	  $sql =  "INSERT INTO Localidade (codigo, nome) VALUES ('".$objLocalidade->getCodigo()."','".$objLocalidade->getNome()."')";	  $stmt = oci_parse($conexao->ora_conecta, $sql);	  $exec = @oci_execute($stmt, OCI_COMMIT_ON_SUCCESS);	  if(!$exec)		  return false;	  else		  return true;	  oci_close($conexao);	}	/**	* Metodo responsavel pela alteracao de dados	* @param  object $objLocalidade	* @return boolean true se alterado, false caso contrario	*/	function update($objLocalidade){	  $conexao = new ConexaoBancoDados(DB_USUARIO, DB_SENHA, DB_HOST,DB_SERVER);		  $objMsg	 = new Msg(); 		  $objUtils   = new Utils();	  $sql = "UPDATE Localidade SET ";	  $sql.=  " codigo = '".$objLocalidade->getCodigo()."',";	  $sql.=  " nome = '".$objLocalidade->getNome();	  $sql.=  "  WHERE codigo = '".$objLocalidade->getCodigo()."'";	  $stmt = oci_parse($conexao->ora_conecta, $sql);	  $exec = @oci_execute($stmt, OCI_COMMIT_ON_SUCCESS);	  if(!$exec)		  return false;	  else		  return true;	  oci_close($conexao);	}	/**	* Metodo responsavel pela exclusao dos dados	* @param  object $objLocalidade	* @return boolean true se excluido, false caso contrario	*/	function delete($codigo){	  $conexao = new ConexaoBancoDados(DB_USUARIO, DB_SENHA, DB_HOST,DB_SERVER);		  $objMsg	 = new Msg(); 		  $objUtils   = new Utils();	  $sql =  "DELETE FROM Localidade";	  $sql.=  "	 WHERE codigo = '".$objLocalidade->getCodigo()."'";	  $stmt = oci_parse($conexao->ora_conecta, $sql);	  $exec = @oci_execute($stmt, OCI_COMMIT_ON_SUCCESS);	  if(!$exec)		  return false;	  else		  return true;	  oci_close($conexao);	}	/**	* Metodo responsavel por listar os dados	* @param  object $objLocalidade	* @return objeto com os dados da classe	*/	function select($Localidade){	  $conexao = new ConexaoBancoDados(DB_USUARIO, DB_SENHA, DB_HOST,DB_SERVER);		  $objMsg	 = new Msg(); 		  $objUtils   = new Utils();	  $sql =  "SELECT * FROM Localidade";	  $stmt = oci_parse($conexao->ora_conecta, $sql);	  $exec = @oci_execute($stmt, OCI_COMMIT_ON_SUCCESS);	  if(!$exec)		  return false;	  else		  return true;	  oci_close($conexao);	}  }?>

Note que meu controller tem um "implements" para a interface criada anteriormente.

 

Para a view tá fácil, é só criar a lista ou form para a classe.

 

Qualquer coisa posta aí, desenvolvemos aqui utilizando o mvc, mas tem poucas pessoas pra trocar idéia desta metologia junto com o php.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá!Mais uma vez, estou gansando os posts da galera ...Eu li sobre esse recurso de interface, mas acho que o site do php não foi muito claro, pelo menos pra mim ....Essa classe de interace, como funciona, é como se fosse uma classe abstrata no JAVA!?Ou se, você define a classe como abstract, não tem como instancia-la, e todos as classes que herdarem essa classe abstrata, deveram ter a assnatura dos seus métodos! (se eu estiver errado, me corrijam ein gente!)fui[]´s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Essa classe de interace, como funciona, é como se fosse uma classe abstrata no JAVA!?

Não. No PHP(5) também tem classes abstratas. Interface é diferente.

Ou se, você define a classe como abstract, não tem como instancia-la, e todos as classes que herdarem essa classe abstrata, deveram ter a assnatura dos seus métodos! (se eu estiver errado, me corrijam ein gente!)

A classe abstrata ? Sim. Sobre interfaces dá uma lida nessa ótima explicação do Fabyo:http://forum.imasters.com.br/index.php?s=&...st&p=602368

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala meu velho!!Valeu pela resposta..mas, então eu ainda não saquei qual a principal diferença entre as duas ...!?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Void:, boa tarde !

 

Bom, como disse no outro tópico sou apenas um iniciante em OOP também, portanto minha explicação pode estar errada ... mas ... vamos tentar : :)

 

Interface

 

Usando a explicação do Fabyo, é um contrato que você cria para implementação de classes. Ou seja, uma série de métodos (só a assinatura, já que na interface não declaramos o modo como esses métodos são implementados) que suas classes implementadas tem que ter.

 

Exemplificando, vamos criar uma interface para as classes do tipo Programador.

Repare que na interface estamos declarando que as classes do tipo Programador devem ter obrigatoriamente o método Programar() (já que todo programador deve programar) porém a forma como esse método Programar() será implementado é de responsabilidade de cada classe.

 

<?phpinterface iProgramador {	public function Programar();	}class ProgramadorPHP implements iProgramador {	public function Programar() {		echo 'programando em PHP';	}}class ProgramadorASP implements iProgramador {	public function Programar() {		echo 'programando em ASP';	}}$obj_php = new ProgramadorPHP();$obj_php->Programar();echo "<br />";$obj_asp = new ProgramadorASP();$obj_asp->Programar();?>
Classes Abstratas

 

No conceito é quase igual às interfaces, porém em classes abstratas podemos implementar métodos "comuns" às classes "filhas" dela. Esse métodos "comuns" não são implementados por todas as classes "filhas" já que não são obrigatórios. Alguns programadores também chamam as classes abstratas de classes "mães".

Exemplificando. Agora vamos criar uma classe abstrata para as classes do tipo Programador().

OBS: O exemplo dado aqui não tem relação nenhuma com o exemplo acima, é só para facilitar o entendimento, ok ?

 

1 - O método obrigatório declarado na classe abstrata (Programar()) é implementado de forma diferente nas três classes "filhas".

 

2 - As classes ProgramadorPHP e ProgramadorJava usam o método "comum" declarado na interface (PesquisarForum(), esse método é um exemplo de método não obrigatório que contém um corpo, ou seja pode ser utilizado diretamente da classe abstrata, embora ele também possa ser sobreescrito na classe "filha").

 

3 - A classe ProgramadorASP não usa os dois métodos que não são obrigatórios, só implementou o método obrigatório.

<?phpabstract class aProgramador {	abstract public function Programar();		public function PesquisarForum() {		echo "Entrando no fórum imasters e pesquisando ... <br />";	}		public function DocumentarCodigo() { }}class ProgramadorPHP extends aProgramador {	public function Programar() {		echo "Programando em PHP <br />";		parent::PesquisarForum();	}		public function DocumentarCodigo() {		echo "Usando PHP DOC <br />";	}}class ProgramadorJava extends aProgramador {	public function Programar() {		echo "Programando em Java <br />";		parent::PesquisarForum();	}		public function DocumentarCodigo() {		echo "Usando Java DOC <br />";	}		public function UsarPadrao() {		echo "Usando um bom padrao para programar <br />";	}}class ProgramadorASP extends aProgramador {	public function Programar() {		echo "Programando em ASP <br />";			}}echo "Programador PHP <br />";$obj_php = new ProgramadorPHP();$obj_php->Programar();$obj_php->DocumentarCodigo();echo "------------------------------- <br />";echo "Programador Java <br />";$obj_java = new ProgramadorJava();$obj_java->Programar();$obj_java->DocumentarCodigo();$obj_java->UsarPadrao();echo "------------------------------- <br />";echo "Programador ASP <br />";$obj_asp = new ProgramadorASP();$obj_asp->Programar();echo "------------------------------- <br />";?>
A partir desses exemplos, da leitura do manual, da explicação do Fabyo, já dá para ter uma idéia ? :)

 

Qualquer coisa que estiver errado por favor me corrijam.

 

Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu meu velho ... consegui compreender a diferença ..e só uma dúvida, é verdade que eu consigo utilizar várias classes de interface em uma classe!? Ou seja, vários implements ;

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.