Tópicos avançados em internet A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação PHP Orientação a objetos Créditos: baseado no material da Profa Beatriz Wilges – SENAC SC Sumário Definindo uma classe; Como criar uma classe; As palavras-chave private e protected; Métodos abstratos e interfaces; A palavra-chave final; Construtores e destrutores; Variáveis e métodos estáticos. Recordando uma função Agrupamento de código Representa uma ação Escopo “local” function my_func($arg1,$arg2) { << function statements >> } O que representa uma classe ? Conceitualmente representa um objeto com seus métodos e atributos Definindo uma classe Como criar uma classe A sintaxe é a seguinte: Class nome_classe { public var $nome <atributos> public function foo(){ ... } <metodos> } Definindo uma classe Uma classe pode conter várias variáveis e funções. Para criar variáveis dentro de uma classe, usamos a instrução var. Podemos utilizar $this para referenciar um Uma classe pode conter várias funções e variáveis. objeto. Para criar um objeto de uma determinada classe utilizamos a instrução new. Para acessar os atributos e metodos dentro de uma classe devemos utilizar o símbolo -> Usar somente um $ $cao->nome e não $cao->$nome <?php Class dog public public echo } } ?> Usando uma classe { var $nome; function latir(){ “au au “; <?php require(‘dog.class.php’); $cao = new dog(); $cao->name = ‘Toto’; echo “{$cao->nome} diz ”; $puppy->latir(); ?> Programação orientada a objetos no PHP 5 Ocorreu o amadurecimento da linguagem no que diz respeito à programação orientada a objetos. A partir dessa versão o PHP passa a operar com o Zend Engine 2.0, utilizando um novo modelo de objetos. Esse modelo gerou significativos ganhos em termos de velocidade e performance, porque ele é mais otimizado e realiza muito menos cópias redundantes de dados. As palavras-chave private e protected Com essas palavras podemos criar métodos ou variáveis privadas ou protegidas em uma classe. Uma variável privada só poderá ser acessada pela própria classe onde ela foi declarada. Já a variável protegida poderá ser acessada também pelas subclasses da classe onde ela foi declarada. Métodos abstratos e interfaces É possível criar métodos abstratos. Isto significa que o método é apenas declarado, mas sua implementação não é fornecida. Isto será feito posteriormente em outra classe. No PHP 5 também temos a possibilidade de criar interfaces. Nelas, inserimos apenas as declarações dos métodos que farão parte da classe que irá implementá-la. A diferença entre os métodos abstratos e interfaces é que uma classe pode implementar diversas interfaces. Utilizamos a palavra implements para indicar que uma classe implementa uma determinada interface. Métodos abstratos <?php abstract class ClasseAbstrata { abstract public function teste( ); } class ClasseImplementacao extends ClasseAbstrata{ public function teste( ){ echo “Método teste( ) chamado!<br>”; } } $obj = new ClasseImplementacao; $obj->teste( ); ?> Interfaces <?php interface MinhaInterface{ public function Teste(); } class MinhaClasse implements MinhaInterface{ public function Teste( ){ //... } } ?> A palavra-chave final Os métodos que forem declarados com a palavra final não poderão ser sobrescritos pelas subclasses. Exemplo: <?php class MinhaClasse{ final function Teste( ) { // … } } ?> Se fosse declarado um método com o nome Teste em uma subclasse de MinhaClasse, ele não iria sobrescrever o método declarado como final. A palavra-chave final Também é possível declarar uma classe como final. Exemplo: <?php final class MinhaClasse{ // } ?> Isso significa que ela não poderá ter subclasses. Construtores Um construtor consiste em um método que será chamado toda vez que for criado um objeto da classe onde ele for declarado. Pode ser utilizado para inicializar um objeto antes dele ser usado. Ele deve ser criado com o nome _construct( ). Construtores <?php class Classe { function _construtor ( ) { print “Esse é o construtor da Classe<br>; } } class SubClasse extends Classe { function _construct ( ) { parent::_construct( ); print “Esse é o construtor da SubClasse<br>; } $obj = new Classe( ); $obj = new Subclasse( ); ?> Destrutor O destrutor é nomeado como _destruct( ). É um método que será chamado após a última referência feita a um objeto no programa, antes da liberação da memória. Pode ser útil para fins de depuração, fechamento de conexão com banco de dados, entre outras tarefas. Destrutor <?php class MinhaClasse [ function _construct ( ) { $this->nome = “MinhaClasse”; print “Este é o contrutor da classe“ . $this->nome . “<br>”; } function _destruct ( ) { print “Este é o destrutor da classe” . $this->nome . “<br>”; } } $obj = new MinhaClasse ( ); ?> Variáveis e métodos estáticos As variáveis estáticas podem ser inicializadas. No PHP 5 a palavra static pode ser utilizada para definir um método como estático. Com isso, é possível chamá-lo mesmo sem a criação de um objeto para a classe onde ele foi declarado. Variáveis e métodos estáticos <?php class Classe { static $variavel_estatica = 10; } print Classe::$variavel_estatica; ?> Variáveis e métodos estáticos <?php class Classe { public static function MetodoEstatico ( ) { // … } } Classe::MetodoEstatico( ); ?>