












































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
Para quem já tem uma boa visão sobre php. Essa é uma boa apostila.
Tipologia: Notas de estudo
1 / 52
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.
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...”; }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- InterfacesInterfaces 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 ""; ?>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áticasQuando 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(); ?>