Nenhum produto encontrado nessa seleção.
Interfaces de Objetos em PHP são entidades que definem os métodos que as classes delas originadas deverão possuir. Não se tratam de classes em si, mas um modelo para suas implementações (classes que virão a configurar seus métodos).
Se você leu nossa aula sobre Abstração de Classes em PHP (leitura recomendada), vai ver algumas similaridades sobre as Interfaces e as classes abstratas, porém, elas não são a mesma coisa.
Classes abstratas devem conter pelo menos um método abstrato (um método sem corpo), que será definido em suas classes filhas (subclasses).
<?php // Classe abstrata abstract class Carro { // Propriedades public $marca; // Método abstrato abstract public function motor( $modelo_motor ); } class Marca extends Carro { // Define o método abstrato public function motor( $modelo_motor ){ echo $this->marca . ' ' . $modelo_motor; } } // Carro $carro = new Marca(); $carro->marca = 'Gol'; $carro->motor('Modelo do motor'); // Gol Modelo do motor ?>
Nas interfaces, por outro lado, todos os seus métodos são abstratos, portanto, uma implementação de uma interface, deverá contém a configuração de todos os métodos que ela estipular.
<?php // Interface interface Carro { // Método public function motor( $modelo_motor ); } class Marca implements Carro { // Propriedades public $marca; // Define o método abstrato public function motor( $modelo_motor ){ echo $this->marca . ' ' . $modelo_motor; } } // Objeto de Marca, que é uma implementação de Carro $carro = new Marca(); $carro->marca = 'Gol'; $carro->motor('Modelo do motor'); // Gol Modelo do motor ?>
No trecho de código acima, você pode ver a criação e uma implementação de uma interface. Para a criação, utilizamos a palavra {php}interface{/php}, para a implementação (a classe que vai configurar os métodos definidos), utilizamos a palavra {php}implements{/php}.
Nas interfaces, você não pode configurar propriedades (variáveis membro), porém, é possível configurar constantes.
<?php // Interface interface Carro { // Constante const Valor = 22000; // Método public function motor( $modelo_motor ); } class Marca implements Carro { // Propriedades public $marca; // Define o método abstrato public function motor( $modelo_motor ){ echo $this->marca . ' ' . $modelo_motor . ' ' . self::Valor; } } // Objeto de Marca, que é uma implementação de Carro $carro = new Marca(); $carro->marca = 'Gol'; $carro->motor('Modelo do motor'); // Gol Modelo do motor 22000 ?>
Você também pode estender interfaces sem preferir, veja:
<?php // Interface interface Carro { // Constante const Valor = 22000; // Método public function motor( $modelo_motor ); } // Uma extensão da interface Carro interface Novo extends Carro { // Constante const Novo = false; } // Uma implementação da interface Novo class Marca implements Novo { // Propriedades public $marca; // Define o método abstrato public function motor( $modelo_motor ){ if ( self::Novo === true ) { echo 'Novo: ' . $this->marca . ' ' . $modelo_motor . ' ' . self::Valor; } else { echo 'Usado: ' . $this->marca . ' ' . $modelo_motor . ' ' . self::Valor; } } } // Objeto de Marca, que é uma implementação de Carro $carro = new Marca(); $carro->marca = 'Gol'; $carro->motor('Modelo do motor'); // Usado: Gol Modelo do motor 22000 ?>
Todos os métodos de uma interface deverão ter visibilidade {php}public{/php}.
Nas implementações de uma interface, você pode criar outros métodos se precisar, não há problemas nisso.
<?php // Interface interface Carro { // Constante const Valor = 22000; // Método public function motor( $modelo_motor ); } // Uma extensão da interface Carro interface Novo extends Carro { // Constante const Novo = false; } // Uma implementação da interface Novo class Marca implements Novo { // Propriedades public $marca; // Define o método abstrato public function motor( $modelo_motor ){ if ( self::Novo === true ) { echo 'Novo: ' . $this->marca . ' ' . $modelo_motor . ' ' . self::Valor; } else { echo 'Usado: ' . $this->marca . ' ' . $modelo_motor . ' ' . self::Valor; } } // Outro método public function MetodoDeTeste () { echo 'Funciona perfeitamente.'; } } // Objeto de Marca, que é uma implementação de Carro $carro = new Marca(); $carro->MetodoDeTeste(); // Funciona perfeitamente. ?>
Conclusão
Uma interface basicamente descreve quais os métodos uma classe deve ter, porém, ela não especifica como tais métodos devem funcionar. Você simplesmente define que precisa que o método X e Y devem ser definidos, porém, a implementação (a classe) é quem vai dizer o que o método X deve fazer, e o que o método Y deve fazer.
Não deixe de seguir nosso curso de PHP gratuito e PHP orientado a objetos.
Em caso de dúvidas, não hesite em comentar.