
























































Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
apostila php
Tipologia: Notas de estudo
1 / 64
Esta página não é visível na pré-visualização
Não perca as partes importantes!

























































Licenciamento de Uso Este documento é propriedade intelectual © 2006 do Centro de Computação da Unicamp e distribuído sob os seguintes termos:
A orientação à objetos é uma maneira de programar que modela os processos de programação de uma maneira próxima à realidade, tratando a cada componente de um programa como um objeto, com suas características e funcionalidades. O tratamento de objetos no PHP 5 foi totalmente reescrito, permitindo a utilização de uma maior quantidade de recursos da POO, melhor performance e mais vantagens na implementação deste tipo de programação. A POO também possibilita uma maior otimização e reutilização do código. Agência para a Formação Profissional da Unicamp – AFPU 4
Classe é a estrutura mais fundamental para a criação de um objeto. Uma classe nada mais é do que um conjunto de variáveis (propriedades ou atributos) e funções (métodos), que definem o estado e o comportamento do objeto. Quando criamos uma classe, temos como objetivo final a criação de objetos, que nada mais são do que representações dessa classe em uma variável. Para declararmos uma classe, utilizamos a palavra-chave class. Nosso exemplo será com a classe Noticia : Exemplo 1.1 – Classe Noticia: titulo = $valor; } function setTexto($valor) { $this->texto = $valor; } function exibeNoticia() { echo ""; echo "". $this->titulo ."
"; echo $this->texto; echo "
"; } } $not = new Noticia; $not->titulo = 'Novo curso de PHP Avançado'; $not->texto = 'Este curso contém os seguinte tópicos: POO, XML, etc.'; $not->exibeNoticia(); ?> Obs: como os atributos são do tipo public , podemos atribuir valores diretamente para eles, sem a necessidade de utilizar os métodos. Para manipularmos variáveis na classe, precisamos usar a variável $this , funções e o separador ->. A classe Diretoria de Transferência Tecnológica – Centro de Computação – Unicamp 5
## 1.1– HerançaHerança é uma forma de reutilização de código em que novas classes são criadas a partir de classes existentes, absorvendo seus atributos e comportamentos, e complementando-os com novas necessidades. O exemplo da vez será com a classe NoticiaPrincipal: Exemplo 1.1.1 – Teste de Herança com a Classe NoticiaPrincipal: imagem = $valor; } function exibeNoticia() { echo ""; echo "imagem ."">
"; echo "". $this->titulo ."
"; echo $this->texto; echo "
"; } } $not = new NoticiaPrincipal; $not->titulo = 'Vestibular da Unicamp termina nesta quarta-feira'; $not->texto = 'Um dos maiores vestibulares do país acaba nesta quarta-feira,'; $not->texto .= 'com número recorde de inscritos'; $not->imagem = 'img_unicamp.jpg'; $not->exibeNoticia(); ?> Como mostra o exemplo, a classe NoticiaPrincipal herdou todas as características da classe Noticia, e ainda foi adicionado o método que dá suporte à exibição de imagens nas notícias principais. Nessas sub-classes é possível redefinir métodos, podendo modificá-los da forma que o programador quiser, como foi o caso do método exibeNoticia(). Sobrescrever métodos é algo bastante comum no processo de herança, visto que os métodos que foram criados na classe “pai” não precisam ser necessariamente os mesmos que os definidos nas classes “filhas”. Diretoria de Transferência Tecnológica – Centro de Computação – Unicamp 7
## 1.2– Método Construtor e Destrutor✔ Construtor : É um método que utiliza o nome reservado __construct() e que não precisa ser chamado da forma convencional, pois é executado automaticamente quando instanciamos um objeto a partir de uma classe. Sua utilização é indicada para rotinas de inicialização. O método construtor se encarrega de executar as ações de inicialização dos objetos, como por exemplo, atribuir valores a suas propriedades. Exemplo 1.2.1 – Método construtor na Classe Noticia: titulo = $valor_tit; $this->texto = $valor_txt; } function exibeNoticia() { echo ""; echo "". $this->titulo ."
"; echo $this->texto; echo "
"; } } $not = new Noticia('Novo curso de PHP Avançado','Abordaremos: POO, XML, etc.'); $not->exibeNoticia(); ?> Agência para a Formação Profissional da Unicamp – AFPU 8
Destrutor : O método destrutor será chamado assim que todas as referências a um objeto em particular forem removidas ou quando o objeto for explicitamente destruído. O método __destruct é executado toda vez que um objeto da classe é destruído pelo fim do script ou através da função unset. Sua função é basicamente zerar variáveis, limpar dados de sessões, fechar conexões com banco de dados, etc. Como no método construtor, o método destrutor possui um nome reservado, o __destruct(). O exemplo a seguir aplica este conceito na classe Noticia e NoticiaPrincipal: **Exemplo 1.2.3 – Método destrutor:** function __destruct() { echo “Destruindo objeto...”; }Este recurso possibilita ao programador restringir ou liberar o acesso às propriedades e métodos das classes. A utilização deste recurso só se tornou possível à partir do PHP 5. Aplica-se este conceito através dos operadores: ✔ Public : Quando definimos uma propriedade ou método como public, estamos dizendo que suas informações podem ser acessadas diretamente por qualquer script, a qualquer momento. Até este momento, todas as propriedades e métodos das classes que vimos foram definidas dessa forma. ✔ Protected : Quando definimos em uma classe uma propriedade ou método do tipo protected, estamos definindo que ambos só poderão ser acessados pela própria classe ou por seus herdeiros, sendo impossível realizar o acesso externo. ✔ Private : Quando definimos propriedades e métodos do tipo private, só a própria classe pode realizar o acesso, sendo ambos invisíveis para herdeiros ou para classes e programas externos. Agência para a Formação Profissional da Unicamp – AFPU 10
A utilização destes modificadores de acesso encontra-se nos próximos dois exemplos. O primeiro exemplo redefiniu as classes Noticia e NoticiaPrincipal: Exemplo 1.3.1 – Utilização dos modificadores de acesso nas Classes Noticia e NoticiaPrincipal: Diretoria de Transferência Tecnológica – Centro de Computação – Unicamp 11
NoticiaUltimaHora: "; echo "". $this->titulo ."
"; echo $this->texto; echo "
"; } } $titulo = 'Vestibular da Unicamp'; $texto = 'Um dos maiores vestibulares do país tem número recorde de inscritos'; $imagem = 'img_unicamp.jpg'; $not_princ = new NoticiaPrincipal; $not_princ->setTitulo($titulo); $not_princ->setTexto($texto); $not_princ->setImagem($imagem); $not_princ->exibeNoticia(); echo "
"; print_r($not_princ); echo ""; $titulo = 'Campus recebe 500 novas árvores'; $texto = 'Plantio, realizado entre 2007 e o primeiro semestre de 2008,'; $texto .= ' integra programa ambiental que estimula a participação da comunidade'; $not_ulthora = new NoticiaUltimaHora; $not_ulthora->setTitulo($titulo); $not_ulthora->setTexto($texto); $not_ulthora->exibeNoticia(); echo ""; print_r($not_ulthora); echo ""; ?>Diretoria de Transferência Tecnológica – Centro de Computação – Unicamp 13
Interfaces permitem a criação de código que especifica quais métodos uma classe deve implementar, sem ter que definir como esses métodos serão tratados. Interfaces são definidas utilizando a palavra-chave interface, e devem ter definições para todos os métodos listados na interface. Classes podem implementar mais de uma interface se desejarem, listando cada interface separada por um espaço. Dizer que uma classe implementa uma interface e não definir todos os métodos na interface resultará em um erro fatal exibindo quais métodos não foram implementados. Vamos criar uma interface que servirá de base para as nossas classes de notícias utilizadas até agora: Exemplo 1.4.1 – Interface iNoticia:
A implementação desta interface é simples. No código a seguir utilizamos a nossa interface iNoticia para a classe Noticia e conseqüentemente NoticiaPrincipal: Agência para a Formação Profissional da Unicamp – AFPU 14
Classes abstratas são classes que não podem ser instanciadas diretamente, sendo necessária a criação de uma sub-classe para conseguir utilizar suas características. Isso não quer dizer que os métodos destas classes também precisem ser abstratos, isso é opcional. Já as propriedades não podem ser definidas como abstratas. Aqui vemos o conceito de polimorfismo, ou seja, a possibilidade de dois ou mais objetos executarem a mesma ação. Um exemplo prático seria uma moto e um carro, os dois tem a ação em comum de Frear e Acelerar; em orientação a objetos usamos classes abstratas para dar funcionalidades iguais a objetos diferentes. Vamos transformar a classe Noticia em uma classe abstrata e depois herdar suas características para a sub-classe NoticiaPrincipal. Abaixo, a seqüência de exemplos para demonstrar este recurso: Exemplo 1.5.1 – Classe Abstrata Noticia titulo = $valor; } abstract public function setTexto($valor); abstract public function exibeNoticia(); } ?> O exemplo acima nos mostra a utilização tanto de métodos abstratos quanto de métodos comuns. Os métodos abstratos não devem conter código, apenas definição. Quando criamos um método abstrato, fazemos com que ele seja implementado em todas as classes que herdarem dessa classe abstrata. No exemplo a seguir, os métodos abstratos serão definidos na sub-classe que Agência para a Formação Profissional da Unicamp – AFPU 16
herdará Noticia, ou seja, NoticiaPrincipal: Exemplo 1.5.2 – Sub-classe NoticiaPrincipal utilizando a classe abstrata Noticia: texto = $valor; } function setImagem($valor) { $this->imagem = $valor; } function exibeNoticia() { echo ""; echo "imagem ."">
"; echo "". $this->titulo ."
"; echo $this->texto; echo "
"; } } $titulo = 'Vestibular da Unicamp'; $texto = 'Um dos maiores vestibulares do país chega ao fim,'; $texto .= 'com número recorde de inscritos'; $imagem = 'img_unicamp.jpg'; $not = new NoticiaPrincipal; $not->setTitulo($titulo); $not->setTexto($texto); $not->setImagem($imagem); $not->exibeNoticia(); echo "
"; print_r($not); echo ""; ?> Diretoria de Transferência Tecnológica – Centro de Computação – Unicamp 17Exemplo 1.6.2 – Classe NoticiaPrincipal herda características da classe Noticia: imagem = $valor; } function exibeNoticia() { echo ""; echo "imagem ."">
"; echo "". $this->titulo ."
"; echo $this->texto; echo "
"; } } $titulo = 'Vestibular da Unicamp termina nesta quarta-feira'; $texto = 'Um dos maiores vestibulares do país acaba nesta quarta-feira,'; $texto .= 'com número recorde de inscritos'; $imagem = 'img_unicamp.jpg'; $not = new NoticiaPrincipal; $not->setTitulo($titulo); $not->setTexto($texto); $not->setImagem($imagem); $not->exibeNoticia(); echo "
"; print_r($not); echo ""; ?> O teste realizado com essas classes mostra o seguinte resultado: Fatal error : Class NoticiaPrincipal may not inherit from final class (Noticia) Diretoria de Transferência Tecnológica – Centro de Computação – Unicamp 19