As classes abstractas são especiais, pois nunca podem ser instanciadas. Em vez disso, tipicamente herda-se um conjunto de funcionalidades base destas numa nova classe. Por esta razão, são muito usadas como classes base numa hierarquia maior de classes. No artigo da herança, criámos a classe Animal e depois a classe Cao que herda da classe Animal. No vosso projecto, podem decidir que ninguém deve poder instanciar a classe Animal, porque é demasiado específica, mas sim usar uma classe específica que herda daquela. A classe Animal irá então servir de classe base à nossa pequena colecção de animais.

Um método pode também ser marcado como abstracto. Assim que definimos uma função da classe como abstracta temos de definir também a própria classe como abstracta, pois apenas classes abstractas podem conter funções abstractas. Outra consequência é que não temos de escrever (nem podemos) qualquer código na função, trata-se somente da sua declaração. Fazemos isto para forçar a herança da nossa classe abstracta para implementar esta função e escrever o seu código. Se não o fizermos o PHP devolve um erro. No entanto as classes abstractas podem também conter métodos não abstractos, que nos permite implementar funcionalidades básicas à classe abstracta. Vamos ver um exemplo de uma classe abstracta:

 

Como podem ver, parece uma classe normal mas com algumas diferenças. A primeira diferença é a presença do identificador abstract, que é usado para marcar a própria classe e a última função como abstracta. Como mencionei, uma função abstracta não pode conter qualquer código, assim sendo termina simplesmente com o símbolo de ponto e vírgula. Vamos agora criar uma classe que pode herdar a nossa classe Animal:

 

E assim acabámos de implementar ambas as funções da classe Animal. Somos obrigados a implementar a função Ola(), uma vez que está marcada como abstract, simplesmente retorna uma palavra comum ao tipo de animal que criámos. Não somos forçados a implementar a função Descreve(), pois já está implementada na classe Animal, mas podemos estender um pouco as suas funcionalidades. A parte boa é que podemos re-utilizar o código implementado na classe Animal, e depois adicioná-las a gosto. Neste caso, usamos o marcador parent para referenciar a classe Animal, e de seguida chamamos a função Descreve(). Depois adicionamos texto extra ao resultado, para clarificar o tipo de animal com que estamos a lidar. Vamos agora usar esta nova classe:

 

Não temos aqui nada de extraordinário. Apenas instanciámos a classe Cao, enviámos duas propriedades de de seguida chamámos os dois métodos definidos na classe. Se testarem este código, irão ver que o método Descreve() é agora uma combinação da versão das classes do Animal e do Cao, tal como esperado.

Artigo anterior do tutorial PHP:

Herança – Classes em PHP

Artigo seguinte do tutorial PHP:

Classes estáticas em PHP

Tiago Ramalho

Tiago Ramalho é um profissional de Informática interessado em Internet, Programação .NET e PHP e blogging. Nos tempos livres escreve nos interessespessoais.com sobre Jardim, Saúde, Sistemas, utilitários e outros temas relacionados com informática.

More Posts - Website - Twitter - Pinterest - Google Plus