Você está na página 1de 31

PHP OO

Universidade Federal de Uberlndia


Faculdade de Computao
PET Sistemas de Informao

Apostila do Curso de PHP


Orientado a Objetos

PHP O.O
1

Sumrio
O que o PHP?....................................................................................................................................4
Como funciona o PHP?........................................................................................................................4
O que ser necessrio para utilizar o PHP neste curso?.......................................................................4
O arquivo PHP.ini.................................................................................................................................5
Primeiro programa em PHP Orientado a Objetos: Construindo um Login..........................................7
Classes e Mtodos Mgicos.............................................................................................................8
Variveis e mtodos.......................................................................................................................10
Propriedades (atributos ou campos)...............................................................................................11
Variveis estticas e mtodos estticos..........................................................................................13
Passagem de parmetros em mtodos............................................................................................14
Definindo parmetros default em mtodos....................................................................................15
Herana..........................................................................................................................................17
Interfaces, Classes e mtodos abstratos ........................................................................................18
Traits..............................................................................................................................................24
Sobreposio (Overriding).............................................................................................................25
A palavra-chave final.................................................................................................................26
Clonagem de objetos......................................................................................................................27
Comparao de objetos..................................................................................................................29
Crditos:.............................................................................................................................................31

Objetivos desta apostila:


Este material foi desenvolvido com o intuito de auxiliar os alunos e professores ao longo do
curso de PHP Orientado a Objetos. Presume-se que os alunos devero possuir conhecimentos de
Programao Orientada a Objetos, pois o foco do curso ser na aplicao deste estilo de
programao na linguagem PHP. Alguns assuntos sero descritos brevemente por se tratar de uma
apostila mais de prtica de conceitos, porm, existiro vrias referncias externas para
aprofundamento terico e prtico. Esta apostila contm muitas ilustraes para facilitar o
aprendizado.

PHP OO
O que o PHP?

PHP (PHP: Hypertext Preprocessor) uma linguagem de programao caracterizada


por ser bastante utilizada no desenvolvimento de aplicaes Web e pela sua facilidade
de ser embutida em cdigos HTML. PHP permite a criao de pginas dinmicas, ou
seja, que apresentam contedo que mudam de acordo com os dados de uma base de
dados, por exemplo. possvel coletar dados de formulrios e ainda enviar ou
receber cookies. PHP uma linguagem simples para iniciantes, porm, cheia de
recursos. Tambm possvel desenvolver aplicaes Desktop utilizando o PHP-GTK.
A verso estvel mais atual a 5.4 (em 03/06/2013). possvel baixar o manual do
PHP no link: http://www.php.net/download-docs.php. Para acompanhar lanamentos
de novas verses e novidades navegue no site: http://www.php.net/.
Veja a histria do PHP em http://www.php.net/manual/pt_BR/history.php.
Como funciona o PHP?
O PHP interpretado no lado do computador servidor (server-side), ou seja, quando o
computador cliente envia uma requisio ao servidor, este ltimo fica responsvel por
trat-la de acordo com a necessidade da aplicao: consultar e armazenar dados no
banco, processar dados, gerar o HTML que ser interpretado e exibido pelo
navegador do cliente, dentre outros.
PHP uma linguagem interpretada, o que quer dizer que no gerado um cdigo
binrio executvel, portanto, ser necessrio fornecer o cdigo fonte ao servidor.
O que ser necessrio para utilizar o PHP neste curso?
Existem vrias maneiras de utilizar o PHP, como pode ser visto em
http://www.php.net/manual/pt_BR/install.general.php. Para este curso, ser utilizado:
Interpretador PHP;
Servidor WEB (Apache);
Browser (Ex.: Google Chrome, Mozilla Firefox, Internet Explorer, Opera,
Safari, etc);
4

Banco de dados MySQL1;


possvel hospedar aplicaes PHP em hosts gratuitos na WEB, por exemplo,
atravs do Hostinger. Desta maneira, no necessrio a preocupao com instalao
e configurao do Apache, PHP e MySQL.
Existem vrias combinaes de softwares livres que facilitam o processo de
instalao e configurao para utilizar o PHP. Exemplos:
XAMPP (X qualquer sistema operacional, Apache, MySQL, PHP, Perl)
WAMP (Windows, Apache, MySQL, PHP)
Qualquer uma das opes acima contm o pacote de software necessrio para
desenvolver aplicaes em PHP. Portanto, instale um deles para prosseguir as
atividades do curso.
Outra ferramenta que facilitar o processo de escrever os scripts PHP a IDE
(Integrated Development Environment), um ambiente integrado para
desenvolvimento de software. Neste curso ser utilizado o software livre NetBeans.
Existem vrias fontes de conhecimentos disponveis em grupos de usurios que
respondem dvidas. O site http://www.phpusergroups.org contm uma lista de grupos
de usurios em diversos pases, inclusive o Brasil.
O arquivo PHP.ini
O PHP tem um arquivo de configurao chamado php.ini. Nele esto definidos vrias
diretivas que controlam o comportamento do PHP em tempo de execuo. Este
arquivo carregado no momento em que o servidor iniciado, portanto, caso altere
alguma das diretivas definidas nele, ser necessrio que o servidor seja reiniciado.
Vejam na tabela a seguir algumas das diretivas:

1 No obrigatrio utilizar o MySQL ou qualquer outro banco de dados no desenvolvimento de


uma aplicao em PHP, porm, neste curso ele ser utilizado em exerccios.
5

Diretiva

Valor
Default
On

Significado

expose_php

Com o valor Off a quantidade de informaes


disponveis ao atacante.
Ex.: expose_php=Off

date.timezone

Com o valor America/Sao_Paulo est sendo


configurado a data e horrio corresponde ao de So
Paulo para as funes que usam data e horas.
Ex.: date.timezone America/Sao_Paulo

disable_functions

possvel desabilitar funes para que o PHP no


execute-as.
Ex.: disable_functions=phpinfo,exec,proc_open

display_errors
file_uploads

Determine se os erros devem ser impresso na tela ou


escondido do usurio. 1 imprime, 2 esconde.

1 Permite uploads de arquivo via HTTP.

upload_max_filesi 2M
ze
max_file_uploads
max_execution_ti
me
memory_limit
mssql.timeout
post_max_size

Tamanho mximo de upload arquivo.

20

Nmero mximo de uploads de arquivos


simultaneamente

30

Tempo mximo em segundos que um script PHP pode


ser executado.

128M

Define a quantidade de memria que um script pode


alocar. Se o valor for -1 no existe limite de memria.

60

Tempo mximo da execuo de um script no mysql.

8M

Tamanho mximo uma post de dados incluindo


upload de arquivos.

Veja uma lista completa de diretivas em http://www.php.net/manual/en/ini.list.php.

Primeiro programa em PHP Orientado a Objetos: Construindo um Login


Abra o NetBeans e crie um novo projeto, acessando Arquivo Novo Projeto
PHP Aplicao PHP.
Escolha um nome para o projeto, por exemplo: hellophp. Certifique que a pasta fonte
do projeto esteja no diretrio htdocs do XAMPP, por exemplo,
C:\xampp\htdocs\hellophp.

Clique em finalizar. Aps criar o projeto selecione a raiz do projeto e v em executar


ou pressione F6.

Todo cdigo PHP deve estar dentro de um <?php ?>. O resultado esperado que seja
aberto uma pgina em branco no browser padro do sistema operacional. Caso o
mesmo no abra, digite no browser o endereo URI http://localhost/PASTA RAIZ
DO PROJETO/index.php (Substitua PASTA RAIZ DO PROJETO pela pasta
correspondente ao projeto no diretrio htdocs). Uma pgina em branco dever
aparecer.
Crie um novo arquivo chamado usuario.php.

Classes e Mtodos Mgicos


Selecione o arquivo criado e crie uma classe concreta chamada Usuario. Nesta
classe ser criado o mtodo construtor (__construct).

No arquivo index.php instancie a classe que voc acabou de criar.

Desta vez, crie o mtodo destrutor (__destruct) da classe Usuario.

Esses dois mtodos implementados so chamados pelo PHP de mtodos mgicos e


comeam com __ (underscore). Alm destes mtodos mgicos, existem outros. Veja
mais em: http://www.php.net/manual/pt_BR/language.oop5.magic.php
PHP reserva todas as funes com nomes comeando com __ como
mgicas. recomendado que voc no use funes com nomes com __ no
CUIDADO
PHP a no ser que voc queira alguma funcionalidade mgica
documentada.

NOTA

No possvel criar dois ou mais mtodos construtores no PHP.

Variveis e mtodos
Variveis em PHP so iniciadas com o smbolo $. Alm disso, PHP uma linguagem
no-tipada. Isto quer dizer que no necessrio declarar o tipo das variveis, pois o
PHP possui a capacidade de inferir sobre tais tipos.
Crie duas variveis uma chamada usuario e a outra senha. Em seguida crie os
respectivos mtodos GETTERS e SETTERS.

DICA

Caso no consiga gerar os mtodos GETTERS e SETTERS


automaticamente
pelo
Netbeans,
utilize
o
site
http://www.icurtain.co.uk/getset.php, para agilizar na construo dos
mtodos.

NOTA

Variveis ou atributos no PHP iniciam com o caractere '$'. Ex.:


$usuario, $senha.

10

NOTA

$this-> uma pseudo varivel utilizada para acessar uma propriedade


NO esttica que est disponvel na classe. Ela uma referncia para o
objeto que chama inicialmente.

possvel definir constantes nas classes PHP. Constantes so valores fixos,


ou seja, que no variam ao longo da execuo do programa. Veja um
exemplo de constante:
const pi= 3.14;
NOTA

Veja que diferentemente de um atributo da classe, uma constante no


possui o smbolo $.
Para acessar uma constante use:
Classe::pi; onde Classe o nome da classe.

Agora que voc j criou as variveis $usuario e $senha com os respectivos


mtodos GETTERS e SETTERS, teste-os, atravs do arquivo index.php como
ilustrado na figura a seguir:

NOTA

Perceba, que um cdigo HTML <br> foi posto junto ao PHP. Esta uma
das facilidades que o PHP fornece.

Propriedades (atributos ou campos)


Os mtodos e as propriedades (atributos ou campos) possuem visibilidade (contexto)
public, protected e private (pblico, protegido e privado).
11

Ex.:
Mtodos

Atributos

Visibilidade (contexto)

public function getNome();


//ou
function getNome();

public $nome;

Default para os mtodos Em


qualquer contexto possvel acess-lo.
Visibilidade fraca.

private function getNome();

private $nome;

Apenas no contexto da classe


possvel acess-lo. Visibilidade forte.

protected function getNome();

protected $nome;

Apenas no contexto da classe e


subclasses possvel acess-lo.
Visibilidade mdia.

Caso queira uma explicao mais detalhada e com exemplos, consulte


http://www.php.net/manual/pt_BR/language.oop5.visibility.php
Na classe usurio, altere a visibilidade do mtodo setUsuario() para
protected e execute o arquivo index.php no Browser.

Ocorrer o seguinte erro fatal devido no ser permitido chamar um mtodo protegido
fora do contexto da classe e das subclasses:
12

Altere novamente a visibilidade do mtodo para public.


Variveis estticas e mtodos estticos
Crie uma varivel esttica chamada $nro_usuarios_online e atribua o valor 0
para ela. Em seguida, crie um mtodo chamado alteraNroUsuarios para que
cada vez que o mtodo construtor for chamado, seja chamado o mtodo
alteraNroUsuarios que por sua vez, incrementar em 1 o nmero de usurios
online.

DICA

self::alteraNroUsuariosOnline() tem o mesmo efeito de


Usuario::alteraNroUsuariosOnline(). A palavra
reservada
self:: usada para referenciar elementos estticos da classe. Enquanto
que $this-> usado para referenciar elementos no estticos.

13

Teste o mtodo criado alterando o arquivo index.php.

Para mais exemplos de membros estticos, consulte o link:


http://www.php.net/manual/pt_BR/language.oop5.static.php.
Passagem de parmetros em mtodos
O mtodo alteraNroUsuariosOnline() foi feito, porm deseja-se que
quando o mtodo __destruct seja chamado, seja decrementada em 1 a varivel
$nro_usuarios_online. Uma das solues, passar um parmetro para a
funo alteraNroUsuariosOnline() que permitir incrementar ou
decrementar a varivel.

14

NOTA

Embora o mtodo alteraNroUsuariosOnline($add_or_remove)


tenha recebido um nmero inteiro como parmetro, possvel passar
qualquer tipo de dados, no somente tipos primitivos (inteiro, float, string,
etc.) como tambm tipos complexos (objetos).

Definindo parmetros default em mtodos


Um recurso interessante do PHP definir valores default para parmetros de
mtodos. No exemplo a seguir, se o programador no passar nenhum parmetro para
o mtodo alteraNroUsuariosOnline($add_or_remove), o valor que esta
varivel assumir 0.

15

Perceba na figura anterior, que possvel utilizar o mtodo


alteraNroUsuariosOnline() sem passar nenhum parmetro para a funo,
pois, o valor default, que no caso 0, foi definido.

Para mais detalhes sobre como passar argumentos para funes e mtodos acesse:
http://www.php.net/manual/pt_BR/functions.arguments.php
16

Herana
No paradigma Orientado a Objetos, vrios so os benefcios da herana . Como visto
em http://erpbasic.blogspot.com.br/2012/01/inheritance-advantages-and.html, a herana permite
reusabilidade de cdigo, extensibilidade, ocultamento de dados, dentre outros. Em
PHP, utilizar herana muito semelhante ao modo de utilizar na linguagem Java. Para
isso, utilizada a palavra reservada extends.
Exemplo: no mesmo projeto, adicione uma classe chamada UsuarioComum que
estender a classe Usuario.
Na classe UsuarioComum existe um mtodo construtor e destrutor que invoca o
construtor e destrutor da super classe (Usuario). Alm disso, um atributo chamado
nro_vezes_acessado estar na classe para fins estticos saber quantas vezes um
usurio comum acessou o sistema. Certifique de que este atributo ser incrementado
em um a cada vez que o usurio comum acessar o sistema.

Questo: uma boa opo que o atributo nro_vezes_acessado seja esttico?


Resposta: No, pois sendo esttico, todos os objetos da classe UsuarioComum
tero acessado o mesmo nmero de vezes, gerando assim um erro semntico.

17

Para testar a classe criada, insira no index.php o seguinte cdigo:

Houve algum erro? Pense em como corrigir isso. Uma dica: this is the problem.
Exerccio: Implemente uma classe Endereco que estenda a classe Empregado. O
Empregado deve ter um ID, nome, sexo e um salrio. A classe Endereco deve
conter, alm dos atributos da classe me, os atributos pas, cidade, rua e nmero. As
classes devem conter implementados em si os conceitos de encapsulamento (atributos
privados e mtodos de manipulao pblicos).
Interfaces, Classes e mtodos abstratos
Classes abstratas so classes que no podem ser instanciadas, isto , no possvel
criar objeto da classe abstrata.
18

Caso um mtodo de uma classe for abstrato, obrigatoriamente a classe ser abstrata.
Um mtodo abstrato possui apenas a sua assinatura (especificao) na classe abstrata,
isto obriga que as subclasses (classe filha) o implemente. Ele ainda deve possuir
visibilidade pblica ou protegida.
Uma classe abstrata pode conter mtodos abstratos (sem implementao) e mtodos
no abstratos.
Uma interface contm apenas mtodos abstratos.
A classe filha define o mtodo com mesma ou mais fraca visibilidade.
Para praticar, a classe Usuario ser uma abstract class. Alm disso, ser adicionado
o mtodo abstrato logar().

Devido classe UsuarioComum ser uma subclasse da classe abstrata Usuario,


ser necessrio que a classe UsuarioComum implemente o mtodo abstract
logar().

19

Portanto, para implementar automaticamente o mtodo logar no NetBeans, coloque o


cursor do mouse na linha que est ocorrendo o erro (no caso linha 3) e tecle
ALT+ENTER:

Selecione a alternativa Implementar Todos os Mtodos Abstratos.


Teste a aplicao rodando o arquivo index.php. Em seguida, experimente
descomentar as linhas 10 e 11 correspondentes na figura a seguir:
NOTA

Uma classe pode estender apenas uma classe.

20

Note a importncia do conhecimento dos conceitos tericos na compreenso dos


erros que acontecem na prtica.
Exerccio: Crie uma classe chamada UsuarioAdmin, que herda da classe
Usuario.
Para exemplificar o uso de interfaces, crie uma interface chamada IUsuario, que
contm o mtodo logar (Usuario u). u um objeto da classe Usuario.

21

Quando definido que o mtodo imprimir_dados (Usuario u) recebe um


objeto u da classe Usuario, significa que o mtodo est sendo forado a receber um
objeto deste tipo. Isto denominado Induo de tipo.
Feito isso, a imagem a seguir ilustra a classe abstrata Usuario implementando a
interface IUsuario.

Veja na imagem, que existem duas maneiras de tratar o


imprimir_dados(Usuario $u) que foi definido em IUsuario:

mtodo

1) O fato de a classe Usuario ser abstrata possibilita que ela deixe que esse mtodo
seja implementado pelas subclasses dela.
2) Implementa o mtodo eliminando a necessidade de que as subclasses implementeos.
No arquivo index.php faa com que um objeto do tipo Usuario chame o mtodo
imprimir_dados(Usuario $u).

22

NOTA

Classes abstratas e concretas podem implementar vrias interfaces.


Interfaces podem definir constantes. Constantes so uma espcie de
varivel e cujo o seu valor no alterado durante a execuo do programa.
Ex.:

NOTA

Interfaces podem extender outras classes:

23

Exerccio: Crie uma interface no projeto que declara pelo menos um mtodo. Em
seguida, mostre um exemplo de como utiliz-la.
Traits
Trait mais um mecanismo de reso de cdigo. O PHP no implementa herana
mltipla, por isso, uma maneira de reduzir esta limitao por meio do uso de traits.
Desta maneira, o desenvolvedor capaz de reusar um conjunto de mtodos situados
em classes independentes que esto em outra hierarquia.
Um trait semelhante a uma classe, porm, com um grupo de funcionalidades. No
possvel instanci-lo como uma classe concreta.

24

Neste exemplo, utilizando traits possvel que a classe View use mtodos dos traits
Hello e World, o que seria impossvel utilizando herana simples.
possvel realizar outras coisas com traits, como por exemplo, mudar a visibilidade
de
um
mtodo
Para
saber
mais
sobre
traits
consulte:
http://www.php.net/manual/pt_BR/language.oop5.traits.php
DICA

Utilize vrgulas para separar os traits a serem utilizados, como mostrado no


exemplo da imagem (use Hello, World;) .

Sobreposio (Overriding)
possvel sobrepor mtodos no PHP de maneira que o mtodo em uma subclasse
seja invocado ao invs do mtodo de sua superclasse. Veja na imagem a seguir um
exemplo de sobreposio do mtodo imprimir_dados(Usuario $u)da classe
usuarioComum. Este mtodo tambm um considerado polimrfico, j que ele
herdado e sobreposto da superclasse e ainda, cada subclasse que implemente este
mtodo poder dar um comportamento diferente para o mesmo mtodo.

25

Execute o index.php.

A palavra-chave final
A palavra-chave final previne que classes filhas sobreponham um mtodo mais
acima na hierarquia. Deste modo, torna-se impossvel criar mtodos de mesmo nome
derivados da classe que utiliza a palavra-chave final.

26

O cdigo anterior resulta em um erro fatal pois ClasseFilha tenta realizar a


sobreposio do mtodo maisTeste de ClasseBase, que por sua vez est
definido utilizando a palavra-chave final, que no permite que mtodos de
sobreposio sejam criados para o mtodo inicial.
Assim como mtodos, as classes que utilizam a palavra-chave final tambm no
permitem que outras classes herdem seus atributos e mtodos, o que resultaria em
erro, como o cdigo do exemplo abaixo:

Pratique:
1. Na classe UsuarioComum faa a sobreposio do mtodo
imprimir_dados(Usuario $u).
2. Na classe Usuario coloque a palavra reservada final no mtodo
imprimir_dados(Usuario $u). Certifique de que entendeu o conceito e em
seguida deixe o mtodo imprimir_dados(Usuario $u) sem a palavra final.
Clonagem de objetos
Clonagem de objetos utilizada quando se deseja criar uma cpia de um objeto, ao
invs, de ter a referncia dele propriamente dita. A clonagem de um objeto feita
atravs da palavra-chave clone. Ex.: $copia_do_objeto = clone
$objeto;.
Veja o exemplo a seguir que ilustra o arquivo index.php mostra diferena entre usar
clonagem de objetos e usar a cpia da referncia do objeto:
27

CUIDADO

Veja que na figura anterior imprimiu -1 usurios online!. Isto ocorre


porque o clone no invoca o mtodo __construct do objeto
UsuarioComum, que adicionaria em 1 o nmero de usurios, porm invoca
o mtodo __destruct que decrementa em 1 o nmero de usurios. Para
contornar este problema, uma soluo ser mostrada a seguir.

28

Na classe UsuarioComum foi implementado o mtodo mgico __clone de maneira


que ele invoca o mtodo construtor.

Comparao de objetos
Existem duas maneiras de comparar objetos:
($objeto1 == $objeto2) e (!=): verifica se dois objetos so da
mesma classe e possuem os mesmos atributos e valores.
($objeto1 === $objeto2) e (!==): verifica se dois objetos so da
mesma classe, possuem os mesmos atributos e valores e representam a mesma
instncia da classe.
Alterando o arquivo index.php para realizar a comparao entre o objeto $usuario,
$clone_usuario e $copia_referencia_usuario.

29

O resultado ser para cada sequncia de if e else:


1234-

Usurio tem as mesmas propriedades da cpia de sua referncia


Usurio no tem as mesmas propriedades da cpia de seu clone
Usurio a mesma instncia da cpia de sua referncia
Usurio no a mesma instncia do seu clone

Isso mostra mais uma vez a diferena entre clonar um objeto e copiar a referncia de
um objeto.

30

Crditos:
Higor Ernandes Ramos Silva
Leonardo Pimentel Ferreira

31

Você também pode gostar