Documente Academic
Documente Profesional
Documente Cultură
Sumrio
Captulo 1. PHP ................................................................................................................................ 7
1.1. O que PHP .......................................................................................................................... 7
1.1.1. Um pouco da Histria do PHP. ...................................................................................... 8
1.2. Instalao do Servidor PHP ................................................................................................... 8
1.2.1. Instalao Apache. ......................................................................................................... 8
1.2.2. Instalao Php5. ............................................................................................................. 9
1.3. Caractersticas de um programa PHP. ................................................................................. 10
1.3.1. Imprimindo algo no navegador WEB via PHP. ........................................................... 10
1.3.2. Comentrios PHP ......................................................................................................... 11
Captulo 2. Iniciando um Projeto com Netbeans. ........................................................................... 12
2.1. Tipos Primitivos .................................................................................................................. 14
2.1.1. Tipos de Primitivos de Dados ...................................................................................... 14
2.2. Exerccios Propostos ........................................................................................................... 14
Captulo 3. Atribuies em PHP ..................................................................................................... 15
3.1. Variveis .............................................................................................................................. 15
3.2. Tipos de Variveis ............................................................................................................... 16
3.2.1. Tipo booleano............................................................................................................... 16
3.2.2. Tipo inteiro ................................................................................................................... 17
3.2.3. Tipo ponto flutuante: .................................................................................................... 17
3.2.4. Tipo numrico .............................................................................................................. 17
3.2.5. Tipo String ................................................................................................................... 18
3.2.6. Tipo array ..................................................................................................................... 18
3.2.7. Tipo objeto ................................................................................................................... 18
3.2.8. Tipo recurso ................................................................................................................. 18
3.2.9. Tipo null ....................................................................................................................... 18
3.3. Constantes ........................................................................................................................... 18
3.3.1. Constantes pr-definidas .............................................................................................. 18
3.3.2. Definindo constantes .................................................................................................... 18
3.4. Converso de varivel ......................................................................................................... 19
3.5. Exerccios Propostos ........................................................................................................... 20
Captulo 4. Operadores em PHP ..................................................................................................... 21
4.1. Operadores de strings .......................................................................................................... 21
4.2. Operadores Matemticos ..................................................................................................... 21
4.2.1. Aritmticos ................................................................................................................... 21
4.2.2. Atribuio..................................................................................................................... 22
4.2.3. Operadores de decremento e incremento ..................................................................... 23
4.3. Operadores relacionais ........................................................................................................ 23
4.4. Operadores lgicos ou booleanos ........................................................................................ 24
4.5. Precedncia de Operadores ................................................................................................. 26
Captulo 5. Interaes PHP com HTML ......................................................................................... 29
5.1. Formulrios ......................................................................................................................... 29
Elementos de um formulrio. ..................................................................................................... 29
5.2. Exemplo de formulrio. ....................................................................................................... 30
5.3. Mtodos Post e Get.............................................................................................................. 32
5.3.1. Mtodo Get .................................................................................................................. 33
Recebendo dados via mtodo GET ............................................................................................ 33
5.3.2. Mtodo Post ................................................................................................................. 34
Captulo 6. Estruturas de Controle e Repetio .............................................................................. 36
6.1. Blocos de controle ............................................................................................................... 36
6.2. If e else ................................................................................................................................ 37
6.3. Atribuio condicional (ternrio) ........................................................................................ 38
6.4. Switch .................................................................................................................................. 39
11.8.
Estanciando a classe criada. ............................................................................................. 88
11.9.
Variveis Estticas ........................................................................................................... 89
11.10. Mtodos Estticos ............................................................................................................ 90
11.11. Exerccios Propostos:....................................................................................................... 91
Captulo 12. Mtodos Mgicos ......................................................................................................... 92
12.1.
Introduo ........................................................................................................................ 92
12.2.
__construct ....................................................................................................................... 92
12.3.
__destruct ......................................................................................................................... 92
12.4.
__toString ........................................................................................................................ 93
12.5.
__invoke .......................................................................................................................... 93
Captulo 13. Herana ........................................................................................................................ 94
13.1.
Introduo ........................................................................................................................ 94
13.2.
Herana (extends) ............................................................................................................ 94
Bibliografia ...................................................................................................................................... 97
Aluno (a),
Seja bem-vindo (a)!
Esta apostila foi criada para ser utilizada na aprendizagem em lgica voltada para programao WEB
usando a linguagem PHP, com o intuito de enriquecer cada vez mais aqueles que busca o conhecimento
profissional ou at mesmo pessoal, apresento um material de linguagens simples e didtica, onde abordaremos
cada tpico passo a passo.
O material foi dividido em 16 captulos, desde lgica de programao, princpios bsicos at os conceitos
mais avanado dentro de um contexto lgico como Orientao a Objetos, levando ao estudante, uma base
inicial para programao WEB ou em outras linguagens. Esperamos que esse material seja um contribuinte
para todos aquele que querem aprender de forma dedicada, e que principalmente tenha um significado
importante para inicializao de uma formao do leitor.
PHP
Captulo 1. PHP
Objetivos
Apresentar basicamente alguns tipos de dados a ser implementados e adotados; Mostrar sua
importncia; Diferenciar varivel e constante; Apresentar comados e processo de entrada.
PHP uma linguagem de criao de scripts embutida em HTML no servidor. Os produtos patenteados nesse
nicho do mercado so as Active Server Pages(ASP) da Microsoft, o Coldfusion da Allaire e as Java Server Pages da antiga
Sun que foi comprada pela Oracle. PHP , s vezes, chamado de o ASP de cdigo-fonte aberto porque sua
funcionalidade to semelhante ao produto/conceito, ou o que quer que seja, da Microsoft.
Exploraremos a criao de script no servidor, mais profundamente, nos prximos captulos, mas, no momento,
voc pode pensar no PHP como uma coleo de supertags de HTML que permitem adicionar funes do servidor s
suas pginas da Web. Por exemplo, voc pode utilizar PHP para montar instantaneamente uma complexa pgina da Web
ou desencadear um programa que automaticamente execute o dbito no carto de crdito quando um cliente realizar uma
compra. Observe uma representao de como PHP e HTML se comportam:
O PHP tem pouca relao com layout, eventos ou qualquer coisa relacionada aparncia de uma pgina da Web.
De fato, a maior parte do que o PHP realiza invisvel para o usurio final. Algum visualizando uma pgina de PHP no
ser capaz de dizer que no foi escrita em HTML, porque o resultado final do PHP HTML.
O PHP um mdulo oficial do servidor http Apache, o lder do mercado de servidores Web livres que constitui
aproximadamente 55 por cento da World Wide Web. Isso significa que o mecanismo de script do PHP pode ser construdo
no prprio servidor Web, tornando a manipulao de dados mais rpida. Assim como o servidor Apache, o PHP
compatvel com vrias plataformas, o que significa que ele executa em seu formato original em vrias verses do UNIX
e do Windows. Todos os projetos da Apache Software Foundation incluindo o PHP so software de cdigo-fonte
Projeto e-Jovem - Mdulo II
PHP
aberto.
#sudo -s
#apt-get update
Com os pacotes bsicos atualizados podemos instalar o apache:
PHP
Espere at a concluso de toda instalao. Por padro o apache automaticamente inicializa, podendo ser utilizado
aps isso. Digite no http://127.0.0.1/ ou http://localhost/ no browser, dever aparecer a seguinte tela:
Isto mostra que o apache est funcionando corretamente. Trata-se de um texto dentro de um arquivo HTML que
vem como padro dentro da pasta /var/www/ , essa a pasta principal do apache, onde trabalharemos com os arquivos
PHP.
O apache pode ser configurado de forma que podemos acessar mais de uma pgina com ip's ou portas diferentes,
ou seja podemos ter www1,www2 em uma mesma mquina servidora fazendo acesso por endereos como
http://localhost:8060 ou http://localhost:82, entre outros. Mas trabalharemos apenas com a configurao padro do
apache, uma vez que existe muito contedo a respeito desse assunto na internet. Para obter mais informaes consulte a
documentao do site oficial do apache: http://httpd.apache.org/docs/2.2/
#apt-get install php5 libapache2-mod-php5 php5-gd curl php5-curl php5-xmlrpc php5-ldap php5odbc
Atualizaremos o Ubuntu com alguns pacotes de servio para servidor com o seguinte comando :
#/etc/init.d/apache2 restart
Aps a concluso da instalao, podemos testar criando um arquivo dentro da pasta var/www.
Entre na pasta principal:
$ cd /var/www
Renomeie o arquivo index.html para outro nome:
#gedit index.php
Aps executar esse comando, digite o seguinte cdigo no editor de texto gedit:
PHP
10
Nesse momento estamos criando uma aplicao PHP que chama a funo phpinfo() que tem como finalidade
mostra informaes sobre configurao do PHP. Lembre-se que toda operao em PHP estar dentro da Tag especial
chamada: <?php
?>
Abra o browser e digite http://localhost/, se tudo estiver correto, observaremos seguinte tela:
echo
um comando que imprime uma ou mais variveis ou textos, onde os mesmos so colocados em aspas simples
Projeto e-Jovem - Mdulo II
PHP
11
resultado:
abc
print
uma funo que imprime um texto na tela. Exemplo:
Cdigo:
Sada no Browser:
Lembrando que os comentrios so trechos de cdigo que no so executados, onde eles servem somente para
quem tem acesso aos cdigos-fonte ou est ligado diretamente a programao desse cdigo. Podemos tambm comentar
muitas linhas, isso serve quando queremos que boa parte do cdigo no execute ou simplesmente colocar um comentrio
mais extenso. Tudo que ficar entre: /* e */ ser um comentrio, independentemente do nmero de linhas, observe o
exemplo abaixo:
ou
PHP
12
Para criar um novo projeto, vamos em: Arquivo > Novo Projeto.
Escolhendo um projeto em PHP. Depois clicamos em Prximo:
PHP
13
Alteraremos o nome do Projeto para treinamento e certificar-se que ele estar dentro da pasta /var/www/.
Clique ao final em Finalizar.
Obs: Caso no tenha a pasta /var/www/, veja como est a instalao do servidor
APACHE na sua mquina. Lembrando que preciso da permisso na pasta, para que voc
possa salvar os arquivos
Na rea de Projetos a esquerda, ir aparecer um novo projeto em PHP, atravs dele, estudaremos todo o contedo
criando o nosso projeto do site.
No palco Principal, o Netbeans j faz por ns toda a criao bsica das estruturas HTML incluindo a TAG PHP
na pgina. Para testar que a nossa aplicao, vamos dar um velho e conhecido: Ol Mundo em PHP. Para nos
certificarmos que est tudo funcionando.
Veja o resultado no seu navegador: Acessando: http://localhost/treinamento/
PHP
14
Veremos a seguir como esses valores sero armazenados e como o PHP ir interpret-los.
EP02.1: Como podemos definir PHP e qual a sua relao com HTML?
EP02.2: Descreva um exemplo estrutural relacionando tag's HTML e delimitaes PHP.
EP02.3: Quais aplicativos bsicos podemos instalar para criarmos um servidor de pginas em PHP?
EP02.4: Em relao ao apache, qual a sua principal finalidade?
EP02.5: Quais as principais extenses de arquivos PHP e diga a diferena entre elas?
EP02.6: Crie dois exemplos de cdigo PHP usando seus delimitadores.
EP02.7: Qual as finalidades de usar comentrios dentro de um cdigo-fonte?
EP02.8: Cite os principais comandos de sada usados em PHP.
EP02.9: Qual a diferena entre echo e print?
EP02.10: Observe o seguinte cdigo e diga qual o item correto:
<?php
//pgina web.
echo '<h1>Ol, essa sua primeira pgina!<h1>';
echo '<h2>Responda!</h2>' print 'O que PHP?';
print 'Qual sua finalidade?'; echo '<h4>Resposta: item a!</h4>';
?>
I - Esse cdigo pode ser interpretado pelo apache normalmente.
II - As tag's HTML so interpretadas pelo servidor.
III - Esse cdigo possui erros.
IV - As tag's so interpretada pelo navegador do cliente.
a) I, II, IV esto corretas.
b) somente a I est correta.
c) III, IV esto correta.
d) somente IV est correta.
e) I e IV esto corretas.
EP02.11: Crie um arquivo PHP dentro da pasta www com o nome index.php, aps isso pegue o cdigo anterior
e adicione a esse arquivo, defina quais textos so visualizadas em seu navegador. Caso exista erros, faa uma correo.
EP02.12: Crie dois arquivos diferentes, um com nome index.php, outro com o nome teste.php, aps isso inclua
o arquivo teste.php dentro do arquivo index.php, ambos arquivos devero ter no seu cdigo impresso mensagens
diferentes utilize o comando print.
Projeto e-Jovem - Mdulo II
15
Atribuies em PHP
3.1. Variveis
Variveis so identificadores criados para guardar valores por determinado tempo. Em PHP elas so declaradas
e inicializadas, porm so armazenadas na memria RAM do servidor web. Esse um dos motivos pelo qual os servidores
precisam de grandes quantidades de memria.
Imagine um servidor com mais de 20 mil acessos simultneos ao mesmo tempo, onde cada usurio est acessando
a mesma pgina feita em PHP. So criadas neste processo variveis diferentes para cada usurio, logo, isso faz com que
muitos processos sejam gerados e processados pelo servidor.
A tipagem em PHP dinmica, ou seja, as variveis no precisam ser obrigatoriamente inicializadas aps a
declarao. Uma varivel inicializada no momento em que feita a primeira atribuio. O tipo da varivel ser definido
de acordo com o valor atribudo. Esse um fator importante em PHP, pois uma mesma varivel pode ser de um mesmo
tipo ou no, e pode assumir no decorrer do cdigo um ou mais valores de tipos diferentes.
Para criar uma varivel em PHP, precisamos atribuir-lhe um nome de identificao, sempre procedido pelo
caractere cifro ($). Observe um exemplo:
Exemplo 1
Para imprimirmos as duas variveis usamos aspas duplas no comando echo, no exemplo anterior temos a seguinte
sada:
Ateno!
Obs.: Podem acontecer erros na exibio das mensagens por conta das codificaes de acentuao.
Caso isso acontea, mude a codificao do seu navegador ou utilize as metas de codificao.
16
Atribuies em PHP
Sempre que utilizarmos dois sinais de cifro ($) precedendo o nome de uma varivel, o PHP ir referenciar uma varivel
representada pelo contedo da primeira. Nesse exemplo, utilizamos esse recurso quando declaramos a varivel $nome
(contedo de $varivel) contendo 'maria'.
Exemplo 2
Resultado = maria.
Quando uma varivel atribuda a outra, sempre criada uma nova rea de armazenamento na memria. Veja
neste exemplo que, apesar de $b receber o mesmo contedo de $a, aps qualquer modificao em $b, $a continua com o
mesmo valor, veja:
Exemplo 3
Para criar referncia entre variveis, ou seja, duas variveis apontando para a mesma regio da memria, a
atribuio deve ser precedida pelo operador &. Assim, qualquer alterao em qualquer uma das variveis reflete na outra,
veja:
Exemplo 4
No exemplo anterior percebemos que tanto $a como $b apontam para a mesma referncia na memria, dessa
forma se atribuirmos um novo valor em $a ou em $b, esse valor ser gravado no mesmo endereo, fazendo com que,
ambas variveis possam resgatar o mesmo valor.
17
Atribuies em PHP
Exemplo 5
Tambm podemos atribuir outros valores booleanos para representao de valores falso em operaes booleanas.
Inteiro 0 ;
Ponto flutuante 0.0 ;
Uma String vazia ou 0 ;
Um array vazio ;
Um objeto sem elementos ;
Tipo NULL .
Exemplo 6
Exemplo 7
Exemplo 8
No entraremos em detalhes em relao a converso desses valores, porm que fique claro a ideia de que uma
varivel numrica pode assumir diferentes tipos de valores.
18
Atribuies em PHP
Exemplo 9
Sintaxe
Significado
\n
\r
\t
\\
\$
\
\
Nova linha
Retorno de carro (semelhante a \n)
Tabulao horizontal
A prpria barra ( \ )
O smbolo $
Aspa simples
Aspa dupla
3.3. Constantes
3.3.1. Constantes pr-definidas
O PHP possui algumas constantes pr-definidas, indicando a verso do PHP, o Sistema Operacional do servidor,
o arquivo em execuo e diversas outras informaes. Para ter acesso a todas as constantes pr-definidas, pode-se utilizar
a funo phpinfo(), que exibe uma tabela contendo todas as constantes pr-definidas, assim como configuraes da
mquina, sistema operacional, servidor HTTP e verso do PHP instalada, como foi feito em exemplos anteriores.
19
Atribuies em PHP
Exemplo 10
O nome de uma constante tem as mesmas regras de qualquer identificador no PHP. Um nome de constante
vlida comea com uma letra ou sublinhado, seguido por qualquer nmero de letras, nmeros ou sublinhados. Voc pode
definir uma constante utilizando-se da funo define(). Quando uma constante definida, ela no pode ser mais
modificada ou anulada.
Estas so as diferenas entre constantes e variveis:
Constantes podem ser definidas e acessadas de qualquer lugar sem que as regras de escopo de variveis sejam
aplicadas;
Constantes s podem conter valores escalares;
Constantes no podem ter um sinal de cifro ($) antes delas;
Constantes s podem ser definidas utilizando a funo define( ), e no por simples assimilao;
Constantes no podem ser redefinidas ou eliminadas depois que elas so criadas.
typecasting
Descrio
(int),(integer)
Converte em inteiro.
(real),(float),(double)
(string)
Converte em string.
(object)
Converte em objeto.
Exemplo 11
Exemplo 12
Exemplo 13
20
Atribuies em PHP
O resultado poderia ser 542.0, mas lembrando que o interpretador do PHP faz outra converso ao notar que o
nmero 542.0 tem a mesma atribuio de 542. O resultado seria o mesmo se tentarmos atribuir $a = 542.0.
ANOTAES
21
Exemplo 14
Nesse exemplo pode-se observar a declarao da varivel $d, logo aps temos uma inicializao e atribuio de
concatenao em uma mesma linha, isso possvel em PHP, deixando o cdigo mais otimizado, porm menos legvel.
Operaes
Operadores
Exemplo
+ 5
Resposta
Adio
Subtrao
20 - 5
15
Multiplicao
56
Diviso
15 / 3
10 % 3
- (valor)
Se for 15 a atribuio
-15
* 8
Veja:
Exemplo 15
Nesse exemplo fizemos algumas operaes, porm ao utilizar parnteses, estamos determinando quem executa
primeiro, no caso a soma de $b+5.
22
4.2.2. Atribuio
O operador bsico de atribuio "=" (igual). Com ele podemos atribuir valores as variveis como foi visto em
exemplos anteriores. Isto quer dizer que o operando da esquerda recebe o valor da expresso da direita (ou seja, "
configurado para"). Mas podemos usar algumas tcnicas, observe o exemplo abaixo:
Exemplo 16
Alm do operador bsico de atribuio, h "operadores combinados" usados para array e string, eles permitem
pegar um valor de uma expresso e ento usar seu prprio valor para o resultado daquela expresso.
Por exemplo:
Exemplo 17
Observe a expresso: $w = 3 e logo aps $w+=5. Isto significa a mesma coisa de $w = $w + 5, ou, $w= 3 +5. A
ideia pode ser usada para string, como foi feito com a varivel $b, onde $b = Bom, logo aps usamos ponto(.) e igual
(=) para concatenar os valores, ficando assim: $b.=Dia!. Lembrando que isso significa a mesma coisa que $b = $b.Dia.
Observe mais um exemplo:
Exemplo 18
Podemos definir uma sequncia com duas concatenaes, onde $f = Dia.turma e logo aps temos $j =
Bom.Dia turma.
Os operadores de atribuio so usados para economizar linhas de cdigo, deixando assim o cdigo mais
funcional e otimizado. A tabela abaixo mostra os principais operadores de atribuio:
Operadores
Descrio
Atribuio simples.
+=
-=
*=
/=
%=
.=
Exemplo:
Observe mais um exemplo aplicando os demais operadores.
23
Exemplo 19
Exemplo 20
Vale ressaltar que a cada echo, o valor de $a sofre modificaes. Isso devido a atribuio feita aps a operao.
Usamos o operador ponto(.) para concatenar os valores obtidos com <br> cdigo usado em HTML para quebra de linha.
Operadores
Descrio
++$a
$a++
- -$a
$a- -
Exemplo:
Exemplo 21
Nesse exemplo temos uma forma aplicada do uso de decremento e incremento, lembrando que a varivel $a pode
ter qualquer nome. Tambm podemos fazer um comparativo com o Pr-incremento ou incremento-prefixado com
operaes que j conhecemos, observe:
Operador
Forma extensa.
Forma simplificada
++$a
$a = $a + 1
$a+=1
- -$a
$a = $a - 1
$a -=1
24
Descrio
Igual. Resulta em TRUE se as expresses forem iguais.
Idntico. Resulta em TRUE se as iguais e do mesmo tipo de dados.
Diferente. Resulta verdadeiro se as variveis foram diferentes.
<
>
<=
>=
Exemplo 22
Nesse exemplo declaramos e iniciamos trs variveis. Usamos ento o comando echo para imprimir o resultado,
onde o condicional ?: foi utilizado. Iniciamos as comparaes de $a, $b e $c, caso a comparao individual retorne
TRUE, imprime verdadeiro, caso retorne FALSE, imprime falso. Observe que o comparador === compara o valor e o
tipo, retornando FALSE por $b se tratar de um tipo inteiro, e $c um tipo ponto flutuante, j o comparador == compara
somente os valores onde 45 igual a 45.0 retornando verdadeiro. Tambm podemos usar o operador !== onde tem a
funo semelhantemente ao operador != , mas retorna TRUE se os tipos forem diferentes. Se a varivel for do tipo
booleano, podemos compar-los assim:
$a == TRUE, $a == FALSE
AND
OU
OR
No
NOT
Esses operadores tem a finalidade de novas proposies lgicas composta a partir de outras proposies lgicas
simples. Observe:
Operador
Funo
no
negao
conjuno
ou
disjuno
Com isso podemos construir a Tabela verdade onde trabalhamos com todas as possibilidades combinatria entre
os valores de diversas variveis envolvidas, as quais se encontram em apenas duas situaes (V e F), e um conjunto de
operadores lgicos. Veja o comportamento dessas variveis:
25
Operao de Negao:
A
(not) no A
Ae B
A ou B
Operador
Descrio
( $a and $b )
( $a or $b )
( $a xor $b )
( ! $a )
($a && $b)
($a || $b)
Dicas: or e and tem procedncia maior que && ou ||, ou seja, em uma comparao extensa, onde
ambos esto aplicados. Eles tm prioridade de executar sua comparao primeiro.
26
Exemplo 23
Exemplo 24
Exemplo 25
Exemplo 26
O resultado ser 17, pois o operador * tem maior precedncia em relao ao operador +. Primeiro ocorre a
multiplicao 2*6, resultando em 12, em seguida a soma de 5 + 12. Caso desejar realizar a operao com o operador +
para s em seguida realizar a operao com o operador *, temos que fazer conforme o exemplo abaixo:
Exemplo 27
Observe que utilizamos os parnteses para determinarmos quem deve ser executado primeiro, assim alterando o
resultado para 42. Os parnteses determinam qual bloco de cdigo executa primeiro, e tambm serve para isolar
determinadas operaes. Veja mais um exemplo onde as operaes so feitas separadamente. Primeiro executa a soma,
em seguida a subtrao e s ento executado a multiplicao, imprimindo um resultado fina 21:
Exemplo:
27
Exemplo 28
A tabela seguinte mostra a precedncia dos operadores, da maior precedncia no comeo para os de menor
precedncia.
Operador
-
>
Descrio
++
--
<
==
>= <=
!=
Igual e diferente
<>
&&
||
E
OU
= += -= *= /= %=
Operadores de atribuio
AND
XOR
Ou exclusivo
OR
importante lembrar que primeiro o PHP executar todas as operaes que estiverem entre parnteses, se dentro
dos parnteses houver diversas operaes, a precedncia dos operadores ser utilizada para definir a ordem. Aps resolver
todas as operaes dos parentes, o PHP volta a resolver o que esta fora dos parnteses baseando-se na tabela de
precedncia de operadores. Havendo operadores de mesma prioridade o PHP resolver a operao da esquerda para
direita.
Tambm podemos trabalhar com procedncia de parnteses, fazendo associaes com um ou mais operadores,
observe o seguinte exemplo:
Exemplo 29
28
$var2 = 2.2635;
print($var1 > $var2 ? sim : no);
?>
EP05.11:Usando o operador de String . para montar a seguinte frase abaixo:
<?php
$a = de;
$b = um;
$c = comunicao;
$c = a;
$d = internet;
$e = meio;
print( ..... );
?>
EP05.12:Observe o cdigo-fonte abaixo e diga qual o resultado booleano final. Justifique sua resposta.
<?
$a = 12.0 < 11.2;
$b = 10*2-3 > 19%3+10;
$c = 10;
print( ($a || $c = 10 && $b) ? "true" : "false");
?>
ANOTAES
29
5.1. Formulrios
Podemos definir formulrio como um conjunto de campos disponveis ao usurio de forma agrupada para serem
preenchidos com informaes requisitada pela aplicao (sistemas web ou pginas). Um formulrio composto por vrios
componentes, alm de possuir botes de ao, no qual define o programa que processar os dados.
Em uma aplicao determinamos ento a entrada de dados (no caso os formulrios), e a sada de dados, que
toda e qualquer informao apresentada ao usurio pelo browser, de forma que ambas tenham uma ligao lgica e possa
retornar um resultado onde todos os componentes da aplicao trabalhem de forma coerente.
Elementos de um formulrio.
Para criarmos um formulrio, utilizamos a tag <form> e dentro dela podemos dispor diversos elementos, onde,
cada um deles representa uma propriedade em particular. A seguir explicaremos os principais componentes de um
formulrio.
Criando um formulrio:
Todo formulrio deve conter no mnimo as seguintes caractersticas, observe:
A tag input pode ser composta por vrios elementos onde neles podemos definir o tipo,nome, e o valor padro alm
de outras propriedades que no apresentaremos nessa apostila.
name Nome atribudo ao componente para sua identificao.
value Valor padro que pode ser atribudo no formulrio.
type Tipo de input, nele onde definimos o tipo elemento o input vai representar.
Observe a tabela abaixo com a definio dos tipos que podemos atribuir ao elemento type do input.
30
type
Descrio
texto
password
checkbox
radio
file
hidden
button
submit
reset
select
Tag:
<textarea>
Exemplo:
No visvel ao usurio.
Observe que definimos uma caixa de texto com 5 linhas e 27 colunas, isso define o tamanho que essa caixa vai ter
dentro do formulrio.
31
Exemplo 30
Resultado:
Tela de Cadastro:
Cdigo-fonte:
Exemplo 31
32
Exemplo 32
Resultado:
Com esses exemplos j podemos trabalhar com as informaes at agora mostrada. Para isso vamos conhecer os
dois principais mtodos de envio de dados de um formulrio para um arquivo PHP.
33
34
Resultado:
Resultado no Browser:
Resultado:
Em casos que precisamos de mais segurana, onde o ocultamento de informao necessrio, o mtodo GET
no uma boa opo. Observe no exemplo anterior que qualquer valor passado pela URL fica visvel, e o usurio pode
ver informaes pessoais como um login e uma senha.
35
Mudana no mtodo
Com o uso do mtodo post, as informaes ficam invisveis ao usurio, isso evita que alguma causa malintencionada venha tornar os dados inconsistentes (dados sem fundamentos ou falsos).
36
Mas se quisermos que mais de um comando pertena a estrutura de controle, ser usado blocos de comandos ( {
comando; } ), onde atravs deles podemos delimitar e organizar os cdigos.
No cdigo ao lado, temos um bloco onde
inserimos dois comandos. Observe que eles no
sero executados, pois a expresso booleana
passada para o IF falsa.
37
6.2. If e else
Essa estrutura condicional est entre as mais usadas na programao. Sua finalidade induzir um desvio
condicional, ou seja, um desvio na execuo natural do programa. Caso a condio dada pela expresso seja satisfeita,
ento sero executadas a instrues do bloco de comando. Caso a condio no seja satisfeita, o bloco de comando ser
simplesmente ignorado. Em lgica de programao o que usamos como SE (expresso) ENTO {comando:}.
Sintaxe:
Exemplo:
if (expresso)
comando;
if (expresso){
comando1;
comando2;
comando3;
Exemplo 33
Caso a condio no seja satisfatria (FALSE), podemos atribuir outro comando pertencente ao IF chamado ELSE,
como se fosse a estrutura SENO em lgica de programao.
Sintaxe:
Exemplo:
if (expresso)
comando;
eles
comando;
if (expresso){
comando1;
comando2;
comando3;
} else {
comando1;
comando2;
comando3;
}
Exemplo 34
Nesse exemplo temos uma expresso booleana onde retorna falso, com isso o IF no executa, passando a
execuo para o eles, que por sua vez executa e atribu o valor menor idade a varivel $texto.
Em determinadas situaes necessrio fazer mais de um teste, e executar condicionalmente diversos comandos
ou blocos de comandos. Isso o que podemos chamar de If's encadeados, onde usamos a estrutura IF-ELSE para
facilitar o entendimento de uma estrutura do tipo:
38
Exemplo:
if (expressao1)
comando1;
else
if (expressao2)
comando2;
else
if (expressao3)
comando3;
else
comando4;
Exemplo 35
Exerccio rpido:
1). Faa uma script em PHP que possua 4 notas de um aluno (cada uma em uma varivel). Depois
calcule e imprima a mdia aritmtica das notas e a mensagem de aprovado para mdia superior ou igual a
7.0 ou a mensagem de reprovado para mdia inferior a 7.0.
2) Faa um script em PHP que receba a idade de um nadador (representada por uma varivel chamada
$idade) e imprima a sua categoria seguindo as regras:
Categoria
Idade
Infantil A
5 - 7 anos
Infantil B
8 - 10 anos
Juvenil A
11- 13 anos
Juvenil B
14- 17 anos
Snior
maiores de 18 anos
uma estrutura parecida com IF e ELSE, onde dependendo da expresso booleana podemos executar um
bloco ou no.
Exerccio rpido:
1) Faa uma script em PHP que receba um nmero representado por uma varivel. Verifique se este
nmero par ou mpar e imprima a mensagem.
2) Crie outro script baseando em um seguro de vida com as seguintes regras:
Projeto e-Jovem - Mdulo II
39
Grupo de Risco :
Baixo
Mdio
Alto
6.4. Switch
Observe que quando temos muitos if's encadeados estamos criando uma estrutura que no considerada uma
boa prtica de programao. Para resolver esse problema temos uma estrutura onde sua funcionalidade semelhante ao
IFELSE. O comando SWITCH uma estrutura que simula uma bateria de teste sobre uma varivel. Frequentemente
necessrio comparar a mesma varivel com valores diferentes e executar uma ao especifica em cada um desses valores.
Sintaxe:
Exemplo:
switch(expresso)
{
case valor
comandos;
case valor
comandos;
case valor
comandos;
case valor
comandos;
...
1:
1:
1:
1:
}
Exemplo 36
40
Exemplo 38
Exemplo 37
Mas o que acontece se no tivermos um valor que seja satisfatrio aos casos existentes no switch? A resposta
bem simples, nenhum dos blocos seria executados, porm temos um comando onde determinamos uma opo padro
caso nenhuma das outras venha ter resultado que satisfaa a expresso passada para o switch chamada default (padro).
Veja um exemplo:
Exemplo 39
A instruo passada no condiz com nenhum dos casos existentes. Por esse motivo o bloco pertencente ao
comando default ser executado.
O comando default pode ser inserido em qualquer lugar dentro do switch, porm caso isso acontea,
o uso do comando break deve ser adicionado para evitar que os case's abaixo sejam executados.
A partir de agora trabalharemos as estruturas de repetio. Elas muito utilizadas nas linguagens de programao.
Exerccio rpido:
1) Faa um script em PHP usando switch, onde receba uma varivel e mostre as seguintes opes:
1 - mdulo.
2 - somar.
3 - subtrair.
4 - multiplicar.
5 - dividir.
41
6.5. While
O WHILE uma estrutura de controle similar ao IF, onde possui uma condio para executar um bloco de
comandos. A diferena primordial que o WHILE estabelece um lao de repetio, ou seja, o bloco de comandos
ser executado repetitivamente enquanto a condio passada for verdadeira. Esse comando pode ser interpretado
como ENQUANTO (expresso) FAA { comandos...}.
Sintaxe:
while (expresso){
comandos;
}
Quando estamos usando um lao de repetio, podemos determinar quantas vezes ele deve ou no se repetir.
Isso pode ser feito de forma manual, onde o programador determina, ou automaticamente, onde quem vai determinar
fluxo de execuo o cdigo-fonte atravs de funes do PHP, funes estas j existentes. Por exemplo a funo
sizeOf.
Para trabalharmos com essa contagem de quantas vezes o lao deve se repetir, usaremos incremento ou
decremento de uma varivel conforme vimos no capitulo de operadores em PHP. Observe o exemplo abaixo:
Exemplo 40
Resultado: 123456789
Nesse exemplo criamos um lao de repetio que tem como condio $a < 10, a cada lao executado um
incremento na varivel $a, fazendo com que o seu valor aumente at a condio no ser mais satisfatria.
Dicas: Tenha cuidado quando estiver trabalhando com loop's (lao de repetio), pois caso a
expresso passada esteja errada, pode ocasionar em um loop infinito fazendo com que o bloco de
cdigo se repita infinitamente. Isso pode ocasionar um travamento do navegador ou at mesmo do
prprio servidor WEB.
Vamos ver agora um exemplo em que o lao se repete de forma automtica, onde quem determina o loop
uma funo do PHP e no um numero determinado pelo programador.
A funo strlen() recebe uma string e retora a quantidade de caracteres incluindo tambm os espaos em
branco. Ele poderia ser aplicado diretamente no echo, mas no exemplo, ele determina a quantidade de loop's.
Exemplo 41
42
Exerccio rpido:
1) Faa um script que conte de 1 at 100.
2) Faa um script que imprima na tela nmeros de 3 em 3 iniciando com 0 at 90, ex: 0,3,6,9...
6.6. Do...while
O lao do...while funciona de maneira bastante semelhante ao while, com a simples diferena que a expresso
testada ao final do bloco de comandos. O lao do...while possui apenas uma sintaxe que a seguinte:
Exemplo:
Sintaxe:
do {
comando;
. . .
comando;
} while (expresso);
Exemplo 42
Resultado: 123456789
Dicas: Talvez na criao de alguma pgina ou sistema web, seja necessrio executar um bloco de
cdigo existente em um lao de repetio pelo menos uma vez, nesse caso podemos usar o
do...while.
Exerccio rpido:
1) Faa um script que conte de -1 at -100 usando do while.
2) Faa um script que imprima na tela somente nmeros pares de 2 at 20 com do while.
6.7. For
Outra estrutura semelhante ao while o for, onde tem a finalidade de estabelecer um lao de repetio em um
contador. Sua estrutura controlada por um bloco de trs comandos que estabelecem uma contagem, ou seja, o bloco de
comandos ser executado determinado nmero de vezes.
Sintaxe:
Parmetros
Descrio
inicializao
Parte do for que executado somente uma vez, usado para inicializar uma varivel.
condio
incremento
Lembrando que o loop do for executado enquanto a condio retornar expresso booleana verdadeira. Outro
Projeto e-Jovem - Mdulo II
43
detalhe importante que podermos executar o incremento a cada lao, onde possibilitamos adicionar uma varivel ou
mais. Mostraremos agora um exemplo fazendo um comparativo entre a estrutura de repetio do while e tambm a do for
de forma prtica.
Exemplo:
while
for
Exemplo 44
Exemplo 43
resultado:123456789
O for no precisa ter necessariamente todas as expresses na sua estrutura, com isso podemos criar um exemplo de
for onde suas expresses so declaradas externamente.
Exemplo 45
Observe nesse exemplo uma proximidade muito grande do comando while. Apesar de ser funcional, no uma
boa prtica de programao utilizar desta forma.
Exerccio rpido:
1) Faa um script que receba duas variveis $a e $b, logo aps imprima os nmeros de
intervalos entre eles com o uso de for.ex: a=5 ,b = 11, imprime : 5,6,7,8,9,10,11.
44
6.8. Foreach
O foreach um lao de repetio para interao em array's ou matrizes, o qual estudaremos com mais detalhes
no prximo captulo. Trata-se de um for mais simplificado que compe um vetor ou matriz em cada um de seus elementos
por meio de sua clusula AS.
Exemplo:
Sintaxe:
Observe o exemplo:
Resultado:
0-ana
1-maria
2-joo
3-alex
Exemplo 47
Nesse exemplo observamos que cada elemento do array possui um ndice (chave), imprimindo na tela o numero
da posio e o valor guardado.
6.9. Break
Outro comando importante o break, usado para abortar (parar) qualquer execuo de comandos como SWITCH,
WHILE, FOR, FOREACH, ou qualquer outra estrutura de controle. Ao encontrar um break dentro de um desses laos, o
interpretador PHP interrompe imediatamente a execuo do lao, seguindo normalmente o fluxo do script.
Sintaxe:
while....
for....
break <quantidades de nveis>;
Vamos ver um exemplo com o uso de break dentro de um lao de repetio (no caso o for), onde criamos um
lao infinito, porm colocamos um if com a condio de parar o lao atravs do break. Observe:
45
Exemplo 48
Podemos notar nesse exemplo a criao de um lao(loop) infinito, que ocorre quando tiramos a condio do for,
ou atribumos for( ; true ; ), porm a condio fica na responsabilidade do if, quando o valor de $a e igual a 10, faz
com que o if execute o break, fazendo com que o lao pare de funcionar.
Mas se tivssemos mais de um lao, como poderamos definir qual deles deixaria de funcionar? Para responder
essa pergunta usamos a quantidades de nveis que pode existir em um break, observe o exemplo abaixo:
Resultado:
Exemplo 49
Observe que para definir qual nvel podemos parar utilizamos o break, ou seja, o primeiro nvel onde o break
est localizado, no exemplo citado temos dois nveis, e determinamos pelo break 2 que o segundo for( que o de fora!
) Deixaria de funcionar.
6.10. Continue
A instruo continue, quando executada em um bloco de comandos for/while, ignora as instrues restantes at
o fechamento em }. Dessa forma, o programa segue para a prxima verificao da condio de entrada do lao de
repetio, funciona de maneira semelhante ao break, com a diferena que o fluxo ao invs de sair do lao volta para o
incio dele. Veja um exemplo:
Resultado:
Exemplo 50
0,2,4,6,8,10,12,14,16,18,
Projeto e-Jovem - Mdulo II
46
Assim como o break, tambm podemos definir em qual nvel queremos que a execuo continue. Veja o exemplo
abaixo:
Resultado:
Podemos observar ento o uso de continue dentro de um lao infinito. Ele faz com que o lao de nvel 3 seja
executado toda vez que a execuo passe pela linha 10 do cdigo, logo, impede que o programa fique sempre executando
dentro do while de nvel 1. Com isso, o while da linha 4 do cdigo tem um ciclo de vida de 5 laos.
Observe tambm que os dois ltimos echo's nunca sero alcanados, pois o comando continue impede que o
fluxo do cdigo passe adiante, fazendo voltar ao nvel determinado.
Resumindo: O continue usado dentro de estruturas de loops para saltar o resto da execuo do loop atual e
continuar a execuo na avaliao do estado, em seguida, o incio da prxima execuo.
Fluxograma:
47
Entendendo o algoritmo:
Abaixo da concatenao no existe o comando break, podendo prosseguir com o caso 3 logo
abaixo.
Uma nova operao de concatenao feita no caso 3 com a varivel $texto, tornando-se :
Ol, senhores, senhoras.
48
Entendendo o algoritmo:
Por fim, a impresso de um texto que ser de: Voc acumulou 1 Pontos.
Obs.: Perceba que nesse algoritmo no diferencia a palavra PONTOS e PONTO de acordo com
o nmero de vidas.
Pergunta: Como melhora riamos esse cdigo para caso eu tenha apenas 1 vida, eu possa imprimir:
Voc acumulou 1 Ponto.
49
ANOTAES
50
$nome[]
$nome[]
$nome[]
$nome[]
=
=
=
=
'Maria';
'Joo';
'Carlos';
'Jos';
A figura abaixo representa um array que tem como valor representao de cores, e possui dez posies, cada posio
representa uma cor, seu ndice (chave) vai de 0 at 9. Veja:
Em cdigo temos:
51
$var = array('texto1'=>'valor1','texto2'=>'valor2',...,'textoN'=>'valorN');
Observe que quando usamos arrays associativos, a compreenso mais fcil, dando mais legibilidade ao cdigo.
Porm no utilizado quando usamos um array dentro de um lao (loop), mas em outros casos sempre bom utilizar
arrays associativos. Veja um exemplo:
Exemplo:
Exemplo 51
Dessa forma podemos acessar o array. Basta determinar o nome do array e qual a chave, onde cada chave tem
um valor j determinado. Resultar em um erro o uso de uma chave errada.
52
7.3. Interaes
Quando falamos de interaes em um array estamos dizendo o mesmo que percorrer esse array usando
mecanismos da prpria linguagem. Como isso as interaes podem ser feitas de vrias formas, mas no PHP podem ser
iterados pelo operador FOREACH que j vimos anteriormente.
Exemplo:
Exemplo 52
Resultado:
Esse tipo de interao muito utilizado, principalmente quando temos arrays associativos.
Dicas: Sempre que se depararem com arrays, onde haja a necessidade de percorrer suas
informaes independentemente da chave, procure sempre utilizar mecanismos de programao
mais simplificados como FOREACH.
nome_do_array[ chave_de_acesso ];
Temos que ter cuidado ao passar uma chave para o array, pois ela deve conter o mesmo nome de qualquer umas
das chaves existentes no array. Caso a chave no exista, o valor no poder ser resgatado. A sintaxe acima retorna um
valor contido no array, por esse motivo temos que atribuir esse valor como mostra o exemplo abaixo:
Exemplo 53
Resultado: telefone.
53
Exemplo 54
Vimos no exemplo anterior o valor da posio 1 do array ('telefone') foi alterada para sobrenome. Vale ressaltar
que esse array tem suas chaves definidas de forma automtica. A primeira posio 0, a segunda 1, e assim
sucessivamente. Veja mais um exemplo onde alteramos o valor, mas usando o operador de atribuio += e concatenao
.=:
Exemplo 55
Exemplo:
$var[2] += 1.90;
// o tipo um ponto flutuante antes e depois.
$var[2] = 'bom dia' ;
// agora temos a mudana de tipo ponto
flutuante para string.
54
Cdigo:
Observe que temos uma chave para representar a linha e outra para representar a coluna, assim, determinando
uma matriz 4x4. Podemos ver tambm que inicializamos um array dentro do outro. Cada sub-array uma linha, e cada
elemento do array maior representa as colunas.
55
Para acessarmos o valor de um array multidimensional, basta colocar as duas ou mais chaves da posio que
queremos acessar. muito semelhante ao array de uma nica dimenso.
Observe o acesso aos exemplos anteriores:
Sintaxe:
Exemplo 56
Dessa forma podemos acessar o elemento numrico 1.2 que est guardado na posio linha 1 coluna 2, lembrando
que o primeiro elemento de um array 0. Abaixo, um exemplo que acessa todos os valores do array e imprime com quebra
de linha:
Resultado:
Explicando o cdigo:
Linha 2 criamos um array de duas dimenses.
Linha 7 temos um foreach para percorrer o primeiro array, ele retorna na varivel $linha os sub-arrys contido no
array maior.
Linha 8 agora temos outro foreach que vai percorrer os valores dos arrays passando pra varivel $linha.
Linha 9 criamos uma varivel $i para contar os elementos.
Linha 10 imprime os valores.
Linha 11 temos um IF, quando $i for igual a 4, significa que podemos executar o cdigo pertencente ao If,
determinando que chegou ao quarto elemento do array.
Linha 12 quebra de linha com o <br>.
Linha 13 zera a varivel $i para comear a contagem de novo.
Projeto e-Jovem - Mdulo II
56
var_dump
Essa funo muito usada por programadores que pretendem realizar debug (anlise mais detalhado para
encontrar supostos erros). Observe um exemplo prtico:
Exemplo 58
Sada no Browser:
print_r
Imprime o contedo de uma varivel assim como var_dump(), porm com um formato menos detalhado e mais
legvel ao programador. Exemplo:
cdigo:
Sada no Browser:
57
Dicas: Ao olhar o cdigo fonte da pgina aberta, nota-se o cdigo bem organizado, porm os
comentrios no podem ser vistos. Procure olhar o cdigo-fonte sempre que tiver dvida de que
cdigo HTML o PHP est gerando. Clique com boto direito do mouse, procure cdigo fonte, e
observe o que gerado!
array_push
Adiciona elementos ao final de um array. Tem o mesmo efeito de utilizar a sintaxe:
Resultado:
array_pop
Remove um valor no final de um array. Sintaxe:
array_pop(nome_do_array);
Exemplo:
Resultado:
array_shift
Remove um elemento do incio de um array, sintaxe:
array_shift( nome_do_array )
Exemplo:
Resultado:
Como j sabemos como lidar com essas funes, observemos que basta conhecer a sintaxe para montarmos um
exemplo. Apresentaremos agora de forma resumida as demais funes.
58
Ateno!
Todas as funes aqui apresentadas so para mostrar ao aluno as formas de trabalharmos
com determinadas funes. Fica a critrio do aluno se aprofundar ou no nesse
conhecimento, uma vez que exista inmeras funes.
Observe a tabela abaixo com outras funes:
Funes
Definio
Sintaxe:
array_unshift
array_unshift(nome_array , novo_valor)
array_pad
array_reverse
array_merge
$novo_array = array_merge(array_1,array_2)
array_keys
array_keys(nome_array)
array_values
$novo_array = array_values(outro_array)
array_slice
Count
$var = count(nome_array)
Funes
Definio
Sintaxe:
in_array
in_array(valor_buscado, nome_array)
sort
sort(nome_array)
rsort
rsort(nome_array)
explode
explode(separador, nomer_string)
implode
implode(separador, nome_array)
Essa tabela mostra as funes mais comuns. De repente voc pode se deparar com algumas delas em cdigos j
feito, ou baixados da internet. Exemplo disso so as ferramentas CMS, como joomla ou wordpress, que so feitas em PH.
Existem muitas combinaes dessas funes e outras a mais em seu cdigo-fonte. Veja alguns exemplos utilizando
algumas das funes anteriores.
Exemplo 59
59
Entendendo o algoritmo:
No escopo temos uma varivel chamada valor = 2 e ndice que recebe o contedo que est em valor que 2
tambm.
Temos tambm um array que ir receber um conjunto descrito, lembrando que o ndice inicial de um vetor zero
at a sua dimenso menos um. Nesse caso temos 7 elementos, ento os ndices para o meu vetor so de zero at
6.
Para cada impresso, temos uma letra seguido de uma concatenao com um espao em branco, ento podemos
chegar a concluso que ir ser impresso um conjunto de letras com e espaos.
O primeiro echo ir imprimir o valor de ndice = 2 que representado pela letra e, em seguida ndice ser
incrementado passando a ser igual a 3.
O terceiro echo ir imprimir o valor de (ndice - 2) = ( 3-2 ) = 1 que representado pela letra b
O quarto echo ir imprimir o ndice zero do meu array representado pela letra d
60
questes 7,8,9:
oi
tudo
estar
voc
vai
com
dia
bem
sim
casa
hoje
em
EP07.8: Crie um cdigo PHP onde com os valores do array possa ser impresso na tela com a frase oi, tudo
bem com voc?.
61
Exemplo:
Exemplo 60
Resultado: 20.244897959184
Nesse exemplo temos a declarao e logo aps a chamada da funo, onde nesse momento que passamos os
dois parmetros na ordem que foi declarada na funo. Lembrando que essa ordem obrigatria.
Observe mais um exemplo, onde a funo declarada, porm no possui a clusula return.
Resultado:
62
Variveis Globais So variveis declaradas fora do escopo de uma funo, porm tem visibilidade (pode ser
acessada) ao contexto de uma funo sem pass-la como parmetro. Para isso declaramos a varivel e fazemos a sua
chamada logo aps com o uso do termo global. Exemplo:
Resultado: 25
Exemplo 61
O exemplo acima mostra que passamos um valor de $a para a funo, porm temos a garantia que o valor continua
integro, ou seja, no foi modificado ao longo do cdigo.
Por Parmetro Para passarmos um valor por parmetro, simplesmente colocamos o operador & na frente
Projeto e-Jovem - Mdulo II
63
do parmetro que queremos que o valor seja alterado, observe o exemplo abaixo:
Exemplo 62
Observe agora nesse ltimo exemplo que apenas acrescentamos o operador & no parmetro que queramos que
alterasse a varivel passada como parmetro, fazendo com que o resultado fosse a soma de 23 + 26 = 49.
Por argumentos variveis O PHP permite outras formas avanadas de passagem de parmetros, onde o valor e
a quantidade so definidas de forma automticas por meio das funes func_get_args() e func_num_args().
func_get_args() diz os valores(argumentos) passado para a funo.
func_num_args() diz a quantidade de valores passados para a funo.
Observe um exemplo mais complexo abaixo:
Resultado:
O resultado : 139.5
Tambm podemos determinar mais de um retorno desde que eles no sejam acessados ao mesmo tempo, observe
o exemplo abaixo:
64
8.5. Recurso.
Funo recursiva uma definio usada tanto na programao quanto na matemtica, onde, significa que uma
funo faz a chamada de si mesma na sua execuo. Um exemplo o clculo do fatorial de um nmero. Observe:
Exemplo 63
Resultado: 120
65
Entendendo o algoritmo:
Uma funo chamada calculo foi definida com 3 parmetros, $n1, $n2, $n3
A funo calculo responsvel por retornar multiplicao de $n2 e $n3 e com o resultado, realizar
a soma com $n1 de acordo com a precedncia matemtica.
Na sua chamada, temos 2 funes, a linguagem PHP comea realizando os clculos das funes mais
internas, sendo assim a primeira funo que iremos analisar.
1. Numeral 1
2. Numeral 2
3. Numeral 3
Agora podemos resolver a funo calculo mais externa, podemos encontrar mais 3 parmetros
1. Numeral 5
2. Funo que retorna um Numeral 7
3. Numeral 3.
Baseado nos clculos temos: 5 + 7 * 3 = 26.
O resultado que ser impresso : 26 baseado na lgica construda.
66
Anotaes
67
fopen
Com esse comando podemos abrir um arquivo e retornar um identificador. Sua sintaxe e a seguinte:
$identificador = fopen(string_do_arquivo,modo_do_arquivo);
string_do_arquivo definido como o nome do arquivo mais a sua extenso, isso incluindo o caminho onde
esse arquivo localizado ou no, por exemplo:
/home/aluno/meu_arquivo.txt
Podemos observar um arquivo criado dentro da pasta alunos com o nome meu_arquivo.txt.
modo_do_arquivo nesse parmetro podemos determinar a forma que o arquivo vai ser aberto com os seguintes
valores:
r read, este modo abre o arquivo somente para leitura.
w write, abre o arquivo somente para escrita, caso o arquivo no exista, tenta cri-lo.
a+ append, abre o arquivo para leitura e escrita, caso o arquivo no exista, tenta cri-lo.
Existem outros modos, mas trabalharemos somente com estes.
Dica!
Para trabalharmos com arquivos sempre importante sabermos se a pasta ou o arquivo
tem permisses dentro do Linux, caso isso no acontea, o arquivo no ser criado, lido
ou at mesmo gravado.
Veja um exemplo do uso do comando fopen:
Caso o arquivo no exista, ele criando dentro da
pasta onde o arquivo *.php foi criado, ou seja, no nosso
exemplo o arquivo se chama index.php e estar dentro da
pasta www, aps executamos esse comando teremos um
novo arquivo com o nome meu_arquivo.txt.
Exemplo 64
68
fwrite
sintaxe:
fwrite(identificador,contedo);
Identificador o parmetro retornado pelo comando fopen.
Contedo o contedo a ser gravado no arquivo.
Vale ressaltar que para podermos gravar no arquivo ele deve ter permisso dentro do Linux e alm disso ter como
parmetro w ou a+ passado para o comando fopen.
Observe um exemplo onde escrevemos (gravamos) duas linhas dentro de um arquivo de texto criado com os
comandos vistos at agora:
Exemplo:
Resultado:
Exemplo 65
O uso de \n antes da palavra rua faz com que ocorra uma quebra de linha escrevendo o resto do contedo na
linha abaixo. Aps a execuo do script (colocando http://localhost no navegador e o nome do script criado), abrimos o
arquivo de texto (meu_arquivo.txt) com um editor e percebemos o resultado final.
Resultado:
No exemplo, fizemos a chamada do comando fwrite trs vezes e escrevemos a cada chamada um valor diferente
concatenando com \n.
fclose
Sintaxe:
fclose(identificador);
69
Exemplo:
Toda vez que abrimos um arquivo com
fopen, devemos fech-lo com o comando fclose
conforme o exemplo ao lado.
Exemplo 66
File
L um arquivo e retorna um array com todo seu contedo, de modo que a cada posio do array representa uma
linha do arquivo comeando pelo ndice 0.
Sintaxe:
$array = file(string_do_arquivo);
string_do_arquivo da mesma forma que definida no comando fopen, usa-se o caminho com o nome do
arquivo ou simplesmente o nome do arquivo caso ele exista na mesma pasta onde o arquivo PHP que contm o comando
foi criado.
Exemplo:
Resultado:
Exemplo 67
Nesse exemplo utilizamos o arquivo anterior onde foi escrito trs linhas, porm efetuamos a leitura somente da
linha 1 (ndice 0) e linha 2 (ndice 1). Oura forma percorrer o array usando um foreach(), dessa forma podemos ler todas
as linhas existentes no arquivo, veja:
Exemplo:
Resultado:
copy
Cria um arquivo para outro local/nome. Retornando um valor booleano verdadeiro (true) caso a cpia tenha
ocorrido sem eros ou falhas, caso contrrio retorna falso(false). Sintaxe:
copy(string_origem,string_destino);
70
Exemplo:
Exemplo 68
Caso tudo ocorra corretamente, o resultado apresentado no navegador Cpia efetuada, e ser criado uma
cpia dentro da pasta com o nome meu_novo_arquivo.txt. Vale lembrar que podemos tambm passar o caminho
completo para onde deve ser copiado, como por exemplo:
/home/aluno/meu_novo_arquivo.txt
Para renomearmos um arquivo usamos:
rename
Sintaxe: rename(nome_do_arquivo, novo_nome);
Para apagarmos um arquivo usamos:
unlink
Sintaxe:
unlink(nome_do_arquivo);
Observe um exemplo, onde renomeamos o arquivo meu_novo_arquivo.txt para arquivo_texto.txt e
apagamos o arquivo meu_arquivo.txt:
Aps executarmos isso
no navegador, percebemos as
mudanas ocorridas dentro do
diretrio.
Exemplo 69
mkdir
Cria um diretrio de acordo com a localizao e o modo. Sintaxe:
mkdir(string_localizao, int_modo);
string_localizao definido como o caminho com o nome do diretrio, ou somente o nome.
int_modo onde definimos as permisses de acesso(como se fosse o chmod do Linux).
Dessa forma podemos criar um diretrio e j atribuirmos as permisses a ele.
getcwd
Retorna o diretrio corrente, este comando usado caso precise obter o diretrio onde o arquivo PHP que
possui este comando est guardado.
Projeto e-Jovem - Mdulo II
71
Sintaxe:
getcwd();
rmdir
Apaga um diretrio.
Sintaxe:
rmdir(nome_diretrio);
Observe o exemplo envolvendo os trs comandos abaixo:
Exemplo:
Resultado:
Observe que o comando getcwd obtm o caminho completo de onde o arquivo PHP que contm o cdigo-fonte
estar guardado.
Comando $_SERVER[$HTTP_USER_AGENT] tem como finalidade retornar informaes do cliente que est
acessando o arquivo PHP pelo browser, abaixo um exemplo desse retorno:
J vimos que o comando HTTP_USER_AGENT retorna uma string com vrias informaes, com isso
podemos utilizar a funo strpos(), que tem como finalidade procurar valores de uma string menor dentro de uma string
Projeto e-Jovem - Mdulo II
72
Exemplo 70
Nesse exemplo procuramos as palavras Firefox e Chrome dentro do valor retornado pelo comando
$_SERVER[HTTP_USER_AGENT]. Dessa forma, podemos tratar o resultado comparando-o com 0, ou seja, se a
palavra existir, significa que seu valor diferente de 0. O resultado impresso na tela de acordo com o navegador do
cliente.
Exemplo de requisio HTTP_USER_AGENT:
9.8. Cookies
Cookies so mecanismos para armazenar e consultar informaes. Eles so armazenados na mquina do cliente
que acessa ao servidor php, e possui vrias atribuies que so definidas pelo programador, por exemplo: imagine uma
loja virtual, onde o cliente colocou em seu carrinho de compras vrios produtos, mas por algum motivo ele no concluiu
a compra, tendo que desligar a mquina que foi utilizada para fazer o acesso. No dia seguinte o cliente entra no mesmo
site e percebe que todos os itens ainda esto no carrinho de compra do jeito que ele deixou, esperando a concluso da
compra. Nesse exemplo, podemos perceber que as informaes foram gravadas na mquina do cliente atravs dos cookies,
que so simplesmente arquivos gerados pela pgina acessada dentro de alguma pasta do navegador que existe
exclusivamente para esses arquivos.
O PHP atribui cookies utilizando a funo setcookie que deve ser utilizada antes da tag <html> numa pgina.
Alm disso o uso de cookies no recomendado quando se trata de informaes sigilosas. Os dados dos cookies so
armazenados no diretrio de arquivos temporrios do visitante, sendo facilmente visualizado por pessoas mal
intencionadas.
Alm da opo aceitar cookies que pode ser desativada a qualquer momento pelo visitante. Mas em cada
navegador essa opo pode mudar de nome. Observe o comando abaixo:
setcookie
Sua sintaxe possui muitos parmetros, abaixo est representada todos os valores que podem ser atribudo ao
setcookie, mas vale ressaltar que no utilizaremos todos eles, somente os principais, veja sua sintaxe.
Setcookie(nome_do_cookie,seu_valor,tempo_de_vida,path,
domnio,conexo_segura);
73
Atributo
Descrio
nome_do_cookie o nome que, posteriormente, se tornar a varivel e o que o servir de referncia para
indicar o cookie.
seu_valor
o valor que a varivel possuir. Esse valor pode ser de todos os tipos.
seu_valor
path
domnio
conexo_segura Indica se o cookie dever ser transmitido somente em uma conexo segura HTTPS.
Observe um cdigo onde criamos um cookie:
Exemplo 71
Criamos ento uma string, logo aps a funo setcookie recebendo como parmetro somente o seu nome e o
valor a ser gravado.
Usaremos o navegador Mozilla Firefox para visualizarmos o cookie criado, para isso basta digitar o endereo
http://localhost na url, e logo aps ir na opo: Ferramentas Propriedades da pgina Segurana Exibir cookie.
Lembre-se de criar o cdigo acima primeiro e depois fazer a chamada pelo navegador de sua maquina. Se tudo ocorrer
corretamente dever aparecer a seguinte tela:
Veja que outras informaes como caminho,
enviar, e validade no foram especificados, porm
podemos determin-los na hora da criao do cookie
dentro do cdigo php.
Mostraremos agora um cdigo onde
atribumos o tempo de vida do cookie, para isso
Nome do Cookie
devemos capturar o tempo com a funo time() atual e
som-lo ao tempo que queremos em segundos, isso faz
Valor do cookie
com que o cookie exista na mquina do cliente de
acordo com a quantidade de tempo determinado pelo
programador, observe um exemplo onde atribuirmos
mais esse parmetro o funo setcookie:
Exemplo:
74
Esse cookie tem a validade de 3600 segundos,
ou seja 1 hora, com isso conclumos que o navegador
fez seu acesso as 14:47:36. Isso muito importante
para a programao dos cookies. Se quisermos que ele
exista por um determinado tempo, temos que calcular
tudo em segundos da seguinte forma:
Data de vencimento do
cookie,
Aps ela ele deletado
$tempo = time()+(3600*24*7);
Esse cookie tem seu tempo de vida de 7 dias,
pois 3600 segundos = 1 hora, 24 horas = 1 dia e 7 *
horas_de_um_dia resulta em 7 dias.
Exemplo:
Validade:
Validade de 7 dias a partir do dia 12.
Acessando um cookie:
Para acessarmos o valor gravado em um cookie bem simples, basta utilizar o comando
$_COOKIE['coloque_aqui_o_nome_do_cookie'], exemplo:
O resultado de acordo com a quantidade de vezes que o cliente entrou no site ou atualizou o mesmo.
9.9. Sesso
Sesses so mecanismos muito parecidos com os tradicionais cookies. Suas diferenas so que sesses so
armazenadas no prprio servidor e no expiram a menos que o programador queira apagar a sesso.
As sesses so mtodos de manter (ou preservar) determinados dados a mant-los ativos enquanto o navegador
do cliente (o internauta) estiver aberto, ou enquanto a sesso no expirar (por inatividade, ou porque em algum ponto
voc mandou que ela expirasse).
Para criarmos uma sesso utilizaremos a funo abaixo:
Projeto e-Jovem - Mdulo II
75
Agora trabalharemos com essa sesso, primeiro podemos determinar o tempo de vida da sesso com o seguinte
comando:
Neste caso, session_cache_expire vem antes de session start.
Porque primeiro ele avisa que a sesso, quando iniciada, deve expirar em
5 minutos, e depois a inicia.
Criamos uma sesso com o nome minha_sessao (no uma boa prtica de programao usar acentos em nomes
de variveis ou qualquer outra nomeao) e atribumos a ela o valor gravado na varivel string $var. Essas informaes
ficam gravadas no servidor, logo aps podemos resgatar o valor da seguinte forma:
Observe que o comando $_SESSION tem seu tratamento igual a uma varivel do tipo Array. Para resgatar o valor
da sesso, basta fazer a chamada do comando passando o nome da sesso, no caso minha_sessao. O exemplo anterior
foi adicionado em um outro arquivo, por esse motivo temos que chamar novamente o comando session_start(), para
trazermos ao arquivo todas as regras usadas em sesso no PHP.
Abaixo temos um exemplo com o uso da funo isset(), que verifica se uma varivel existe ou no, retornando
um valor booleano( true ou false ):
O resultado de acordo com a existncia ou
no da sesso.
Para desativarmos uma sesso podemos utilizar dois tipos de mecanismos: um deles o uso da funo
session_destroy() que tem como finalidade destruir todas as sesses criada pelo usurio, a outra forma desalocarmos a
sesso criada com o uso da funo unset().
Uso de session_destroy():
Uso de unset():
Usamos unset() quando queremos desalocar uma determinada sesso, imaginamos que o usurio ao acessar uma
determinada pgina, tenha criado vrias sesses com nomes diferente. Os nomes das sesses so determinada pelo
programador, porm ao clicar em um link, o mesmo tem que destruir a seo escolhida. O exemplo abaixo destri a sesso
especificada:
Dessa forma destruirmos a sesso minha_sessao,
porm se existirem outras, elas ainda continuaro ativas.
76
include<arquivo>:
A instruo include() inclui e avalia o arquivo informado. O cdigo existente no arquivo entram no escopo do
programa que foi inserido, tornando-se disponvel a partir da linha em que a incluso ocorre. Se o arquivo no existir,
produzir uma mensagem de advertncia (warning).
Exemplo onde temos dois arquivos:
cdigo do, arquivo_teste.php
cdigo do arquivo index.php
Resultado:
Nesse exemplo podemos notar que o cdigo existente no arquivo_teste.php foi inserido dentro do arquivo
index.php, tendo como resultado a execuo dos dois cdigos como se fossem apenas um, esse recurso muito utilizado,
pois podemos incluir at mesmo cdigos de pginas inteiras em um arquivo.
require<arquivo>:
Comando muito parecido ao include. Difere somente na manipulao de erros. Enquanto o include produz uma
warning, o require uma mensagem de Fatal Error caso o arquivo no exista.
Sintaxe:
require 'nome_do_arquivo.php';
include_once<arquivo>:
Tem funcionalidade semelhante ao include, a diferena que caso o arquivo informado j esteja includo, esse
comando no refaz a operao, ou seja, o arquivo includo apenas uma vez. Este comando til para garantir que o
arquivo foi carregado apenas uma vez. Caso o programa passe mais de uma vez pela mesma instruo, evitar
sobreposio de arquivo.
Sintaxe:
include_once 'nome_do_arquivo.php';
require_once<arquivo>:
Tem funcionalidade parecida com o comando require. A diferena justamente caso o arquivo j tenha sido
includo no programa, pois ele no carrega novamente o cdigo. muito semelhante ao include_once, evitando
redeclaraes ou sobreposies, porm a mensagem exibida caso o arquivo no exista de Fatal Error.
Sintaxe:
require_once 'nome_do_arquivo.php';
77
1.
2.
3.
4.
Os programadores devem prestar muita ateno nas mensagens de erro, afinal nenhum programador quer por no
ar um sistema que quando o primeiro visitante entra aparea uma mensagem de erro. Para evitar essas inconvenincias
use sempre um @ antes de cada chamada as funes. Se a opo track_errors no arquivo php.ini estiver habilitada,
a mensagem de erro poder ser encontrada na varivel global $php_errormsg. Para exibir a mensagem direta no
navegador procure ativar a opo display_errors, as funes sero ativadas para On(ligada) ou Off (desligada).
O arquivo php.ini no linux geralmente fica na pasta: /etc/php5/apache2/php.ini .
Veja o Exemplo:
Resultado:
Essa funo deixaria todos os caracteres em minsculo, mas seu erro foi ignorado, no exibindo nenhuma
mensagem de erro.
Lembrando: podemos utilizar tag's curtas no PHP <? ?> em vez de tags normais <?php ?>,
mas isso vai depender da configurao do PHP (php.ini), em alguns casos no funciona.Um vendedor
de cestas bsicas precisa de um sistema ao qual ele possa digitar quantas cestas bsicas ele vendeu e
qual o salrio final que ele ir ter:
78
Exerccio Resolvido.
Um vendedor tem um salrio fixo de R$ 500,00 mais um bnus de 10% do valor de cada cesta bsica vendida .
Sabe-se tambm que cada cesta bsica custa R$30,00.
Crie cdigo PHP que ir calcular e mostrar na pgina qual ser o salrio do ms.
OBS: Imagine que voc j tem um formulrio que tm um campo chamado : qtdCestasV que ir enviar essa
informao via POST para uma salarioVendedor.php .
Crie um cdigo PHP para solucionar o problema do vendedor.
79
EP09.13: Crie um arquivo chamado dados.php, nesse arquivo dever conter os seguintes requisitos:
-Os dados do formulrio da questo 1 dever ser enviado para esse arquivo via metodo POST.
-O aquivo dados.php dever conter cinco variveis, cada uma para determinado campo, exemplo:
$nome = $_POST['nome'];
-Os valores dever ser impresso na tela.
EP09.14: Qual a finalidade do comando $_SERVER [HTTP_USER_AGENTE]?
EP09.15: Crie um cookie gravando nele o seu nome, logo aps abra o Firefox e Exiba o valor gravado.
EP09.16: Crie um arquivo chamado criar_sessao.php, utilize comando PHP para cria uma seo com a
durabilidade de 3 minutos e adicione o valor sesso ativa.
EP09.17: Crie um novo arquivo chamado ler_sessao.php para verificar se a sesso criada na questo 9 existe
ou no. Utilize o comando $_SESSION para ler o valor nela contido e imprima na tela.
EP09.18: Quais os possveis erros existentes em PHP e qual a definio de cada um deles?
Anotaes
PHP UML
80
10.1.1.
Abra seu NetBenas v em Ferramentas > Plugins > Configuraes > instalar e adicione esse link:
http://dlc.sun.com.edgesuite.net/netbeans/updates/6.9/uc/m1/dev/catalog.xml
Esse link compatvel com as verses superiores a verso 6.9, foi testado at a verso 7.3 se voc tiver uma
verso inferior a 6.9, esse link poder no dar certo, caso isso acontea, procure um link xml compatvel com a sua
verso.
Com o repositrio instalado, basta ir na Aba de Plugins Disponveis que o pacote UML estar disponvel para
instalao.
10.2.1.
Diagrama de Atividade
Um diagrama de estado especial, onde a maioria dos estados estado de ao, e a maioria das transies ativada
por concluso das aes nos estados de origem.
O objetivo estudar os fluxos dirigidos por processamento interno, descrevendo as atividades desempenhadas
em uma operao.
10.2.2.
Diagrama de Sequncia
O diagrama de sequncia mostra a colaborao dinmica entre um nmero de objetos, e visa mostrar a sequncia
de mensagens enviadas entre objetos.
10.2.3.
Um ator uma pessoa (ou dispositivo, ou outro sistema) que interage com o sistema.
10.2.4.
Diagrama de Classe
Denota a estrutura esttica de um sistema. As classes representam coisas que so manipuladas por um sistema.
Esse diagrama considerado esttico porque a estrutura de classes vlida em qualquer ponto do ciclo de vida
do sistema.
Neste Curso aprenderemos como trabalhar com Diagrama de Classe, pois esse diagrama bem prximo da
criao e estruturao do que iremos aprender nos prximos captulos.
PHP UML
81
PHP UML
82
Se sentiu alguma dificuldade na configurao da ferramenta UML no netbeans, isso no um problema, existem
outras ferramentas livres que realizando os mesmos Processos no linux. So exemplos de outroas aplicaes que
trabalham com UML Dia, Visual Paradigm e Umbrello.
83
Fbrica de Computadores.
Servio de Digitao.
Relatrio
Final.
A Programao orientado a objeto uma metodologia que os programadores utilizam com objetivo de atingir
alguns requisitos importantes na construo de um bom programa ou site como:
Organizar o cdigo : Com o nosso cdigo dividido, podemos facilmente dar manuteno ou encontrar algum
erro mais facilidade.
Reutilizao do cdigo: No precisamos reescrever todo o cdigo, quando necessitamos dele novamente.
Manter Padres : Utilizao de um mesmo padro conceitual durante todo o processo de criao do cdigo.
At o final do curso iremos aprender e trabalhar nessa metodologia. Ento, bastante ateno nesse e nos prximos
captulos.
84
Iremos aprender, como criar uma Classe, ou seja, referencia para futuros Objetos. Imagine que queremos
criar um Pessoa. Para poder criar uma Pessoa teremos antes que fazer 2 perguntas bsicas.
O que poderei
ter? O que
poderei fazer?
Anote tudo que uma pessoa pode ter, como nome, data de
nascimento, RG, CPF, etc. Para a resposta da primeira pergunta, ns
temos o que chamamos de Atributos da classe Pessoa
Anote Tudo que uma pessoa pode fazer, ou seja, suas aes, como
acordar, dormir, falar o seu nome, etc. Para a resposta da segunda
pergunta ns temos o que chamamos de Mtodos da classe
Pessoa
Com o conceito de Classe, atributos e mtodos podemos
adaptar as nossas necessidades para uma classe do Tipo
Usurio, por exemplo. Veja a seguir como seria essa
adaptao
Exemplo:
Imagine que iremos criar um usurio para o nosso site,
seguindo a mesma linha de raciocnio temos as seguintes
caractersticas e aes de uma classe Usurio
85
Exerccio rpido.
Crie no papel e caneta, uma classe para : Pessoa , Carro, Bicicleta e Computador.
Para cada classe criada, faa a pergunta: O que minha classe dever ter ? O que ele poder fazer ?.
Organize essas informaes em atributos e mtodos e esteja pronto, para criar documentao UML e implementar um
cdigo nos prximos tpicos.
Dessa forma podemos criar qualquer classe com os seus atributos e mtodos de forma a poder visualizar melhor
a estrutura do projeto.
No prximo tpico estaremos realizando o Processo de criao com classe em linas de cdigo, procure sempre
fazer um link do que aprendemos com o que estamos codificando quando criarmos a classe, atributos e mtodos na
linguagem PHP.
86
Atributos:
Mtodos
Para o nosso usurio, teremos tambm que usar um mtodo especial, chamado de mtodo mgico. Esses
mtodos tm nomes e funes especificas e comeam com __ (2 underlines). O mtodo mgico que iremos trabalhar
se chama : __construct. Este mtodo um construtor da classe, ou seja, a nossa classe s poder existir se satisfazer
plenamente a chamada do construtor. Vamos levar em considerao que para um usurio existir, ele precise
obrigatoriamente de um nome de usurio e uma senha para alimentar os seus atributos, pois so os valores bsicos para o
usurio logar-se. Ento incluindo no cdigo, temos:
Nome do Mtodo
(Mtodo Mgico)
Parmetros
ATENO: Quando precisamos chamar os atributos dentro da classe usamos o $this-> assim o
PHP ir fazer as devidas atribuies como mostra na imagem acima.
Veremos mais alguns mtodos mgicos no prximo captulo. Com o nosso construtor feito, vamos para os demais
mtodos. Temos algumas nomenclaturas de bons costumes para mtodos, veja uma delas na tabela abaixo:
Mtodo Descrio
Sets
Gets
87
Crie na classe usuario os metodos GET e SET de todos os atributos que esto contido nela:
ATENO:
Perceba que o mtodo setId, pede um valor como parmetro, esse parmetro modifica o seu atributo. O
Mtodo getId no ir precisar de parmetro nenhum, pois sua funo apenas retornar o valor do atributo.
Iremos ver nos prximos tpicos mais afundo sobre esse assunto.
11.5. Encapsulamento
Encapsulamento uma forma de proteo do nosso cdigo, existem informaes que queremos que algumas
classes vejam, outras no. Imagine a sua conta de e-mail. A conta do seu usurio poder ser vista por outras pessoas, pois
ele ir identificar o seu e-mail dos demais, porm a sua senha algo privado onde s voc poder ter acesso a ela. Da
mesma forma que queremos mostrar ou proteger os nossos dados, uma classe tambm tem as mesmas necessidades e
podemos defini-las atravs do encapsulamento.
public - ou pblico, qualquer classe pode ter acesso
private - ou privado, apenas os mtodos da prpria classe pode manipular o atributo
protected - ou protegido, pode ser acessado apenas pela prpria classe ou pelas suas subclasses.
Por boas prticas de programao, os atributos da nossa classe Usurio estar como private.
Perceba que por padro de nomenclatura, os mtodos que tem essa funo, comea com o termo set seguido
pelo atributo que queremos alterar. Podemos receber outros objetos como parmetro.
88
ATENO: Perceba que tambm usamos o sinal -> para chamar mtodos das classes.
Ento finalmente entrando no navegador temos o seguinte
resultado da imagem ao lado:
89
Podemos criar mtodos que no sejam do tipo get / set. Podemos criar mtodos para fazer qualquer operao
com o que foi aprendido em todo o nosso curso de PHP, como inserir operaes matemticas, estruturas
condicionais,estruturas de repetio, etc... Veja os exemplos abaixo :
Parabns, os princpios bsicos para a criao de classes, atributos, mtodos, construtores e como cham-los est
feito. Se ainda sente alguma dvida em relao a algum dos recursos estudados, sugerimos volte a estudar esses conceitos
e como aplica-los na apostila ou em outros materiais.
Se tivermos 300 objetos estanciados do tipo pessoa, como alterar ondeVivo = Planeta gua em todos os
objetos em uma nica instruo sem precisar percorrer todos eles?
Basta criar uma varivel esttica no atributo ondeVivo, assim se alteramos em 1 dos objetos essa varivel,
todas
elas
sofrero
a
mesma
alterao.
Veja
como
cri-lo:
90
Perceba que para criar uma varivel esttica, basta adicionarmos o termo static nela. Para acessarmos a
variveis nos mtodos precisamos usar o termo : self::. Faa o teste estanciando mais de um objeto do tipo pessoa,
chame o mtodo setOndeVivo() em um dos objetos. Em seguida, procure ver nos demais objetos instanciados as
alteraes
feitas
pelo
mtodo
getOndeVivo.
11.10.
Mtodos Estticos
Mtodos estticos so usados para criar classes que no precisam ser estanciados. Usamos esses mtodos quando
queremos fazer algumas de verificao de validade, CPF, RG, registros de login e senha, podemos usar tambm para
estabelecer algumas sequncia de TAGS desejveis dentre vrias outras funes, veja como construir uma fila de Artigos
em uma pgina simples usando mtodos estticos:
Para criar um mtodo esttico, basta adicionarmos o termo static no mtodo. Ao invs de estanciar essa classe,
voc poder chamar diretamente com nomedaClasse::nomeDoMetodo. Neste exemplo, o nome da classe listArt
ento vamos cham-lo com listArt::separadorArtigos(numero) veja como implement-lo:
11.11.
91
Exerccios Propostos:
EP11.1: Lembra das classes criadas : Pessoa, Carro, Bicicleta, Casa, Computador ?Como seria essa a
estrutura no Diagrama de classe para elas ?
EP11.2: Como seria a implementao em cdigo? Leve em considerao o que foi anotado nos exercios
passados e a o que foi feito na modelagem no diagrama de classe da questo anterior.
EP11.3: Monte um formulrio Livre para cada Classe Criada. O formulrio ir enviar as informaes para uma
pgina em PHP que ser responsvel por guardar essas informaes em Objetos e em seguidas imprimi-las. Feito isso,
melhore seu algoritmo colocando as informaes em ma tabela HTML. No formulrio, procure criar campos diversos
como campo de texto, comboBox, etc.
EP11.4: Imagine outras situaes onde podemos criar uma varivel esttica e procure implementar em alguma
classe criada ou em um classe nova que possa criar.
EP11.5: No exemplo acima, faria alguma diferena se o encapsulamento da varivel esttica fosse private?
EP11.6: Quais seriam as vantagens ou desvantagens quanto a segurana dessa informao encapsulada?
EP11.7: Crie uma classe que contenha as informaes em um vetor dos classes Criados e mtodos que possam
receber e Enviar essas informaes em uma tabela.
92
12.2. __construct
Esse mtodo mgico o mais conhecido de todos, vimos eles no captulo anterior, vamos recapitular ento: como
o prprio nome j diz, construct, significa construo, esse mtodo tem como funo ser inicializado no momento da
estancia de um objeto, vamos observar novamente a utilizao desse mtodo na classe usurio:
Com a funo __construct implementada, qualquer classe s poder existir se obedecer s regras de parmetros
desse mtodo, no exemplo da classe usurio, a cada vez que eu estanciar um novo objeto usurio, eu terei obrigatoriamente
que preencha um usurio e uma senha.
12.3. __destruct
Como o nome j diz, destruct significa eliminao, quando os objetos no so mais usados pelo algoritmo,
podemos eliminar ele da memria, o mtodo mgico __destruct responsvel por realizar uma ao ao fim da sua
existncia, vamos criar esse mtodo em uma classe Aluno para ver como funciona.
Neste algoritmo, pedimos para ele imprimir a mensagem: O Objeto foi finalizado quando o interpretador PHP
deixar de us-la.
Assim, podemos estanciar ela e usar os seus mtodos e ter a seguinte resposta no browser:
93
12.4. __toString
Como o prprio nome j diz, toString significa tornar sequncia de caracteres, esse mtodo responsvel
por representar um valor ao tentarmos ter como resposta o prprio objeto. Nos exemplos anteriores, retornamos valores
ou atributos atravs de mtodos get, porm podemos fazer com que o Prprio objeto retorne um valor. Veja na Imagem a
baixo a sua construo:
A diferena do mtodo __tString para o mtodo get que no precisamos chamar um mtodo para que possamos
retornar esse valor, o prprio Objeto ir representar o valor que voc desejar, veja como execut-lo:
12.5. __invoke
Como o prprio nome j diz, invoke, significa chamar. Ele ser chamado sempre quando o script tenta
chamar o prprio objeto como uma funo, veja sua construo na imagem abaixo:
Perceba que no precisamos usar o -> para chamar nenhum mtodo, o prprio objeto Aluno ter um
mtodo incorporado, conseguimos implement-lo usando o Mtodo mgico __invoke.
Existem outros mtodos mgicos na API do PHP, continue pesquisando para estudos complementares.
Veja mais sobre mtodos mgicos em: http://php.net/manual/pt_BR/language.oop5.magic.php
PHP UML
94
As classes funcionam como uma famlia, os filhos herdam caractersticas dos seu pais, porm nada impede que
eles tambm tenham suas caractersticas.
Ns j temos uma classe chamada Pessoa, que contem suas caractersticas e aes. Porm se ns quisermos
criar uma nova classe chamada Aluno, Funcionrio, Cliente ou Professor teramos novamente que criar uma
estrutura de uma pessoa dentro de cada uma delas?
Para evitar reescrita de cdigo, podemos fazer com que essas classes por exemplo herde todas as caractersticas
de pessoa. Neste nosso caso, a classe Pessoa a classe Pai as demais classes que vo herdar caractersticas dela, sero
classificadas como classes filhas. Veja a imagem abaixo, como seria uma Classe Aluno herdando caractersticas da
classe Pai que j criamos nos captulos passados chamada Pessoa.
Antes de entender o cdigo, como seria a modelagem no Diagrama de classe? Para criar interface ou herana
basta clicarmos em uma classe ao qual voc quer montar uma relao e aparecer o seguinte menu ao lado:
Uma Classe Pai considerada na hierarquia uma classe mais genrica, em quanto
as filhas so consideradas especializaes
PHP UML
95
Veja um exemplo de como seria uma especializao e generalizao envolvendo classes genrias e especializadas
no diagrama de Classe.
Baseado no diagrama, a classe Pai ou seja a classe mais genrica, seria a classe Pessoa. As classes abaixo
seriam especializaes da classe Pessoa, onde cada uma delas tem algo em particular, por exemplo, apenas a classe
Aluno tem informao de matriculo, apenas funcionrio tem informaes de salrio e Cliente tem apenas informaes
de crdito de bnus.
Alm das caractersticas herdadas, a classe filha, tambm herda as necessidades da classe pai, no nosso exemplo,
a classe Pessoa, para existir, precisa de nome e data de nascimento. Assim um aluno, para que possa existir, tambm
precisar obrigatoriamente pelo menos dessas caractersticas. Alimentamos essas dependncia, chamando mtodos da
classe pai usando o comando: parent::. Com esse comando temos acesso a todos os mtodos da classe pai, inclusive o
construtor, ento a qualquer momento temos acesso das informaes da classe Pai Pessoa dentro da classe filha Aluno,
claro obedecendo as regras de encapsulamento. Adicionamos ao Aluno um atributo matricula que ser obrigatrio para
a existncia dessa classe, e um mtodos responsvel por mostrar a matricula desse aluno. Veja como seria sua
implementao:
PHP UML
96
Precisamos primeiro incluir a classe que ser herdada com include_once em seguida usamos o
extends para referenciar qual classe ser herdada.
Outro exemplo:
Para demonstrar como definir o relacionamento de herana, considera-se o contexto de ter que desenvolver um
programa que simule o comportamento de vrios tipos de animais em um determinado ambiente.
Inicialmente, apenas um grupo de animais estar presente neste ambiente e cada animal deve ser representado
por um objeto. Alm disso, os animais movem-se no ambiente ao seu modo e podem fazer um conjunto de coisas. O
programa dever prever que novos tipos de animais podero ser includos no ambiente.
O primeiro passo observar cada animal e definir o que cada objeto do tipo animal tem em comum no que diz
respeito aos atributos e comportamentos (mtodos). Deve-se definir tambm como os tipos de animais se relacionam.
Inicialmente, o programa deve simular o comportamento dos animais, ou seja, de um leo, de um lobo, de um gato, de
um hipoptamo, de um tigre e de um cachorro.
O segundo passo consiste em projetar a superclasse, ou seja, a classe que representa o estado e o
comportamento em comum a todos os animais. Para este exemplo, como todos os objetos so animais, a
superclasse foi denominada como Animal e as variveis e mtodos em comuns a todos os animais foram
atribudos a ela, como ilustrado na Figura. Neste exemplo, cinco variveis foram definidas: (o tipo de comida
que o animal come), (o nvel de fome do animal), (representao da altura e largura do espao que o animal
vagar ao seu redor) e (as coordenadas X e Y do animal no espao). Alm disso, quatro mtodos foram
definidos para definir o comportamento dos animais: (comportamento do animal ao fazer algum rudo),
(comportamento 57 do animal ao comer), (comportamento do animal dormindo) e (comportamento do animal
quando no est nem dormindo nem comendo, provavelmente vagueando no ambiente).
O terceiro passo o de decidir se alguma subclasse precisa de comportamentos (mtodos) especficos ao seu tipo
de subclasse. Analisando a classe Animal, pode-se extrair que os mtodos devem ter implementaes diferentes em cada
classe de animais, afinal, cada tipo de animal tem comportamento distinto ao comer e fazer rudos. Assim, esses mtodos
da superclasse devem ser sobrescritos nas subclasses, ou seja, redefinidos. Os mtodos no foram escolhidos para serem
redefinidos por achar que esses comportamentos podem ser generalizados a todos os tipos de animais.
Exerccio:
1. Como seriam os exemplos estruturados na apostila em PHP ? Modele e monte essas estruturas
PHP UML
97
Bibliografia
http://php.net/docs.php/
http://www.php.com.br/
http://www.planet-php.net/