Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


apostila php avancado, Notas de estudo de Informática

Para quem já tem uma boa visão sobre php. Essa é uma boa apostila.

Tipologia: Notas de estudo

Antes de 2010

Compartilhado em 02/04/2010

karlos-eduardo-alves-11
karlos-eduardo-alves-11 🇧🇷

3 documentos

1 / 52

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34

Pré-visualização parcial do texto

Baixe apostila php avancado e outras Notas de estudo em PDF para Informática, somente na Docsity!

Licenciamento de Uso Este documento é propriedade intelectual © 2006 do Centro de Computação da Unicamp e distribuído sob os seguintes termos:

  1. As apostilas publicadas pelo Centro de Computação da Unicamp podem ser reproduzidas e distribuídas no todo ou em parte, em qualquer meio físico ou eletrônico, desde que os termos desta licença sejam obedecidos, e que esta licença ou referência a ela seja exibida na reprodução.
  2. Qualquer publicação na forma impressa deve obrigatoriamente citar, nas páginas externas, sua origem e atribuições de direito autoral (o Centro de Computação da Unicamp e seu(s) autor(es)).
  3. Todas as traduções e trabalhos derivados ou agregados incorporando qualquer informação contida neste documento devem ser regidas por estas mesmas normas de distribuição e direitos autorais. Ou seja, não é permitido produzir um trabalho derivado desta obra e impor restrições à sua distribuição. O Centro de Computação da Unicamp deve obrigatoriamente ser notificado ([email protected]) de tais trabalhos com vista ao aperfeiçoamento e incorporação de melhorias aos originais. Adicionalmente, devem ser observadas as seguintes restrições: · A versão modificada deve ser identificada como tal · O responsável pelas modificações deve ser identificado e as modificações datadas · Reconhecimento da fonte original do documento · A localização do documento original deve ser citada · Versões modificadas não contam com o endosso dos autores originais a menos que autorização para tal seja fornecida por escrito. A licença de uso e redistribuição deste material é oferecida sem nenhuma garantia de qualquer tipo, expressa ou implícita, quanto a sua adequação a qualquer finalidade. O Centro de Computação da Unicamp não assume qualquer responsabilidade sobre o uso das informações contidas neste material.

Capítulo 1

Programação Orientada à Objetos Programação Orientada à Objetos

com PHP com PHP

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.

1.1– Herança

Heranç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, 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 suporte à exibição de imagens nas notícias principais. Nestas 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 têm porquê serem os mesmos que os definidos nas classes “filhas”.

## 1.2– Método Construtor e Destrutor

✔ Construtor : É um método que contém o nome reservado __construct() , e que não precisa ser chamado da forma convencional, pois é executado automaticamente quando instanciamos um objeto. Classes que tem um método construtor chamam-no cada vez que um objeto novo é criado, por isso, é apropriado para qualquer inicialização que o objeto possa vir a precisar antes de ser usado. O método construtor se encarrega de resumir 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 setTitulo($valor) { $this->titulo = $valor; } function setTexto($valor) { $this->texto = $valor; } 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(); ?>

**Exemplo 1.2.3 – Método construtor da Classe Noticia sendo chamado em NoticiaPrincipal:** function __construct($valor_tit, $valor_txt, $valor_img) { parent::__construct($valor_tit, $valor_txt); $this->imagem = $valor_img; } ✔ 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. Como no método construtor, o método destrutor possui um nome reservado, o __destruct(). O exemplo abaixo aplica este conceito na classe Noticia e NoticiaPrincipal: **Exemplo 1.2.3 – Método destrutor:** function __destruct() { echo “Destruindo objeto...”; }

1.3- Encapsulamento

Este recurso possibilita ao programador restringir ou liberar o acesso às propriedades e métodos das classes. A utilização deste recurso só é 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 desta 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.

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: titulo = $valor; } function setTexto($valor) { $this->texto = $valor; } function exibeNoticia() { echo ""; echo "". $this->titulo ."

"; echo $this->texto; echo "

"; } } class NoticiaPrincipal extends Noticia { private $imagem; function setImagem($valor) { $this->imagem = $valor; } function exibeNoticia() { echo ""; echo "imagem ."">

"; echo "". $this->titulo ."

"; echo $this->texto; echo "

"; } } ?>

## 1.4- Interfaces

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 implementar 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 nos exemplos anteriores é simples. No código abaixo, utilizamos a nossa interface iNoticia para a classe Noticia e conseqüentemente NoticiaPrincipal:

Exemplo 1.4.2 – Interface iNoticia implementada na Classe Noticia: titulo = $valor; } public function setTexto($valor) { $this->texto = $valor; } public function exibeNoticia() { echo ""; 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'; $not = new Noticia; $not->setTitulo($titulo); $not->setTexto($texto); $not->exibeNoticia(); echo "

"; print_r($not); echo ""; ?>

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 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 ""; ?>

1.6- A palavra-chave 'final'

Classes definidas com a palavra-chave final não podem ser herdadas, ou seja, não é possível criar subclasses através destas classes. Definindo métodos desta forma, as subclasses que os herdarem não poderão redefini-los. Os próximos exemplos mostram a utilização deste recurso: Exemplo 1.6.1 – Classe Noticia definida com a palavra-chave final: titulo = $valor; } function setTexto($valor) { $this->texto = $valor; } function exibeNoticia() { echo ""; echo "". $this->titulo ."

"; echo $this->texto; echo "

"; } } ?>

## 1.7- Métodos e propriedades estáticas

Quando definimos métodos ou propriedades como estáticos (utlizando a palavra-chave static), estamos permitindo que estes possam ser chamados externamente sem haver a necessidade de estarem no contexto de um objeto, isto é, não é necessário instanciar um objeto para poder acessá-los: Exemplo 1.7.1 – Propriedade $nome_jornal definida como estática na Classe Noticia: titulo = $valor; } function setTexto($valor) { $this->texto = $valor; } function exibeNoticia() { echo ""; echo "Nome do Jornal: ". self::$nome_jornal. "

"; 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...'; $not = new Noticia; $not->setTitulo($titulo); $not->setTexto($texto); $not->exibeNoticia(); echo "

". Noticia::$nome_jornal; // echo "

". Noticia::$titulo; ?>

Dentro da classe filha NoticiaPrincipal, a chamada à métodos ou propriedades estáticos da classe pai ficaria da seguinte forma: **Exemplo 1.7.2 – Propriedade $nome_jornal sendo chamada pela sub- classe NoticiaPrincipal:** imagem = $valor; } function exibeNoticia() { echo ""; echo "Nome do Jornal: ". parent::$nome_jornal. "

"; 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(); ?>