Desenvolvimento Web II - PHP e MySQL
Matheus Abrantes Gadelha
Universidade Federal do Rio Grande do Norte Programa de Educa¸c˜ao Tutorial - Ciˆencia da Computa¸c˜ao
Natal, 2010
Roteiro
PHP
I
Introdu¸ c˜ ao
I
Vari´ aveis
I
Tipos
I
Estruturas de controle de fluxo
I
Orienta¸ c˜ ao a objeto
I
Atividade pr´ atica MySQL
I
Modelo de dados relacionais
I
Cria¸ c˜ ao e abandono de tabelas
I
Inser¸ c˜ ao, atualiza¸ c˜ ao e remo¸c˜ ao de dados
I
Sele¸ c˜ ao de dados Criando aplica¸ c˜ oes web
I
Integrando MySQL e PHP
I
Padr˜ oes de projeto PHP
I
Desenvolvimento de aplica¸ c˜ ao-exemplo
Introdu¸c˜ ao
Conhecendo PHP
Surgiu por volta de 1994, como um subconjunto de scripts Perl criados por Rasmus Lerdof, com o nome PHP/FI (Personal Home Page Tools/Forms Interpreter)
Linguagem extremamente modularizada, ideal para instala¸ c˜ ao e uso em servidores web.
Carascter´ısticas
Linguagem interpretada Tipagem fraca
Programa¸ c˜ ao estrutrada
Suporte a programa¸ c˜ ao orientada a objetos
Introdu¸c˜ ao
Conhecendo PHP
O c´ odigo PHP n˜ ao ´ e vis´ıvel para o usu´ ario. Ele ´ e utilizado para gerar c´ odigo HTML;
Muitas vezes o c´ odigo php est´ a inserido em p´ aginas HTML;
Possibilidade de criar p´ aginas baseadas em informa¸ c˜ oes coletadas pelo servidor;
PHP ´ e server-side;
Motiva¸c˜ ao
Por que aprender PHP?
Linguagem mais utilizada para desenvolvimento web. P.e.:Wikipedia foi completamente desenvolvida em PHP
Sintaxe similar a C/C++
Suporte a in´ umeros tipos de bases de dados: Oracle, Sybase, PostgreSQL, InterBase, MySQL, SQLite, MSSQL, Firebird
Suporte aos protocolos: IMAP, SNMP, NNTP, POP3, HTTP, LDAP, XML-RPC, SOAP.
E poss´ıvel abrir sockets e interagir com outros protocolos ´
”Hello World!!!”
Seu primeiro c´ odigo PHP...
1<!DOCTYPE HTML PUBLIC ”−//W3C//DTD HTML 4 . 0 1 T r a n s i t i o n a l //EN”
2 ” h t t p : / /www . w3 . o r g /TR/ h t m l 4 / l o o s e . d t d ”>
3<html>
4 <head>
5 <t i t l e>Exemplo</ t i t l e>
6 </head>
7 <body>
8
9 <?php
10 echo ”Eu s o u um s c r i p t PHP ! ” ;
11 ?>
12
13 </body>
14</html>
Echo n˜ ao exibe mensagens na tela, mas escreve a string desejada no html.
Utilize o navegador para abrir a p´ agina e verificar o c´ odigo-fonte.
”O comando echo”
Escrevendo
HTMLcom
PHPecho ´ e utilizado para escrever strings em p´ aginas HTML. Observe o seguinte trecho:
1<?php
2i f (s t r s t r( $ SERVER [ ”HTTP USER AGENT” ] , ”MSIE” ) ) {
3 echo ”Vc e s t a h u s a n d o o I n t e r n e t E x p l o r e r<b r />” ;
4} ?>
Podemos intercalar c´ odigo PHP com HTML para obter uma melhor legibilidade. Ser´ a bastante ´ util quando conte´ udos de p´ aginas inteiras forem modificados por escolhas de navega¸c˜ ao dos usu´ arios.
1<?php i f (s t r s t r( $ SERVER [ ”HTTP USER AGENT” ] , ”MSIE” ) ) { ?>
2 <h3>s t r s t r r e t o r n a v e r d a d e i r o</h3>
3 <c e n t e r><b>Vc e s t a h u s a n d o o I n t e r n e t E x p l o r e r</b></c e n t e r>
4<?php } e l s e { ?>
5 <h3>s t r s t r r e t o r n a f a l s o</h3>
6 <c e n t e r><b>Vc n e s t a h u s a n d o o I n t e r n e t E x p l o r e r</b></c e n t e r>
7<?php } ?>
O comando echo
Atalhos de escrita
E poss´ıvel utilizar diferentes estilos de tags ´ php para escrever c´ odigo HTML mais rapidamente
1<?php echo ’ p a r a s e r v i r d o c u m e n t o s XHTML ou XML ’ ; ?>
2
3<s c r i p t l a n g u a g e=” php ”>
4 echo ’ T e s t a n d o s c r i p t ’ ;
5</ s c r i p t>
6
7<? echo ’ Modelo de t a g m a i s s i m p l e s ’ ; ?>
8
9<?= ” e x p r e s s i o n ” ?> = <? echo ” e x p r e s s i o n ” ?>
Esclarecimente importante
Sobre a utiliza¸ c˜ ao de ponto e v´ırgula...
Assim como C, Java e outras linguagens de programa¸ c˜ ao, o uso de
’;’(ponto e v´ırgula) ´ e obrigat´ orio ao t´ ermino de cada instru¸ c˜ ao. Contudo, quando uma tag PHP termina, o ’;’ N˜ AO precisa ser inserido se a tag termina IMEDIATAMENTE DEPOIS desse caractere(’;’). Exemplificando:
1<?php
2 echo ’ I s t o eh um t e s t e ’ ;
3?>
4
5<?php echo ’ I s t o eh um t e s t e ’ ?>
6
7<?php echo ’ O mi t i mo s a t a g de f e c h a m e n t o que f a l t a ’ ;
Para evitar complica¸ c˜ oes, SEMPRE utilize o ’;’.
Vari´ aveis
Tipos e declara¸ c˜ ao
Vari´ aveis PHP possuem tipos.
S˜ ao dinamicamente tipadas.
Para proporcionar uma melhor legibilidade, utilize a palavra chave var antes de declarar uma vari´ avel.
1<?php
2$ a b o o l = TRUE;
3$ a s t r = ” f o o ” ;
4$ a s t r 2 = ’ f o o ’ ;
5$ a n i n t = 1 2 ;
6echo g e t t y p e( $ a b o o l ) ;
7echo g e t t y p e( $ a s t r ) ;
8i f (i s i n t( $ a n i n t ) ) {
9 $ a n i n t += 4 ;
10}
11i f (i s s t r i n g( $ a b o o l ) ) {
12 echo ” S t r i n g : $ a b o o l ” ;
13}
14?>
Strings
1<?php
2$ c e r v e j a = ’ H e i n e k e n ’ ;
3echo ”O s a b o r d a s ’ $ c e r v e j a ’ s eh o t i m o ” ;
4echo ” E l e b e b e u a l g u m a s ${c e r v e j a}s ” ;
5echo ” E l e b e b e u a l g u m a s {$ c e r v e j a}s ” ;
6?>
Strings tamb´ em podem ser escritas com aspas duplas, em formato heredoc
ou nowadoc.
Arrays
Conceitos
Em PHP, arrays s˜ ao mapas ordenados
Eles podem simular filas, pilhas, cole¸c˜ oes, dicion´ arios, etc.
Lidar com arrays ´ e fundamental para processar informa¸ c˜ oes de uma base de dados
Pelo fato de PHP ser orientado a objeto, podemos criar arrays utilizando m´ etodos construtores.
PHP possui uma sintaxe muito abrangente. Isso evita erros, mas tamb´ em torna o c´ odigo menos leg´ıvel e de mais dif´ıcil manuten¸ c˜ ao.
Adote um estilo de programa¸ c˜ ao.
Arrays
Cria¸ c˜ ao de arrays
1<?php
2$a = a r r a y( ’ c o r ’ => ’ v e r m e l h a ’ , ’ s a b o r ’ => ’ d o c e ’ ,
3 ’ f o r m a ’ => ’ r e d o n d a ’ , ’ nome ’ => ’ maca ’ ,
4 4 // a c h a v e s e r a 0
5 ) ;
6
7$a [ ’ c o r ’ ] = ’ v e r m e l h a ’ ;
8$a [ ’ s a b o r ’ ] = ’ d o c e ’ ;
9$a [ ’ f o r m a ’ ] = ’ r e d o n d a ’ ;
10$a [ ’ nome ’ ] = ’ maca ’ ;
11$a [ ] = 4 ; // a c h a v e s e r a 0
12
13// o mesmo de a r r a y ( 0 => ’ a ’ , 1 => ’ b ’ , 2 => ’ c ’ )
14$b [ ] = ’ a ’ ;
15$b [ ] = ’ b ’ ;
16$b [ ] = ’ c ’ ;
17 18
19$ c o r e s = a r r a y( ’ v e r m e l h o ’ , ’ a z u l ’ , ’ v e r d e ’ , ’ a m a r e l o ’ ) ;
20f o r e a c h ( $ c o r e s a s $ c o r ) {
21 echo ”Vc g o s t a de $ c o r ?\n ” ;
22}
Estruturas de controle de fluxo
if...else...
A sintaxe mais comum para utiliza¸ c˜ ao das estruturas de controle if e else s˜ ao apresentadas a seguir:
1<?php
2i f ( $a > $b ) {
3 echo ” a i s b i g g e r t h a n b ” ;
4} e l s e i f ( $a == $b ) {
5 echo ” a i s e q u a l t o b ” ;
6} e l s e {
7 echo ” a i s s m a l l e r t h a n b ” ;
8}
9?>
Estruturas de controle de fluxo
if...else
Outra sintaxe pode ser utilizada:
1<?php /∗ I n c o r r e c t Method : ∗/
2i f( $a > $b ) :
3 echo $a . ” i s g r e a t e r t h a n ” . $b ;
4e l s e i f( $a == $b ) : // W i l l n o t c o m p i l e .
5 echo ” The a b o v e l i n e c a u s e s a p a r s e e r r o r . ” ;
6e n d i f ;
7/∗ C o r r e c t Method : ∗/
8i f( $a > $b ) :
9 echo $a . ” i s g r e a t e r t h a n ” . $b ;
10e l s e i f( $a == $b ) :
11 echo $a . ” e q u a l s ” . $b ;
12e l s e:
13 echo $a . ” i s n e i t h e r g r e a t e r t h a n o r e q u a l t o ” . $b ;
14e n d i f ;
15?>
Estruturas de controle de fluxo
while
1<?php
2/∗ e x a m p l e 1 ∗/
3$ i = 1 ;
4w h i l e ( $ i <= 1 0 ) {
5 echo $ i ++; /∗ t h e p r i n t e d v a l u e w o u l d be
6 $ i b e f o r e t h e i n c r e m e n t
7 ( p o s t−i n c r e m e n t ) ∗/
8}
9
10/∗ e x a m p l e 2 ∗/
11$ i = 1 ;
12w h i l e ( $ i <= 1 0 ) :
13 echo $ i ;
14 $ i ++;
15e n d w h i l e ;
16?>
Estruturas de controle de fluxo
for
1<?php
2f o r ( $ i = 1 ; $ i <= 1 0 ; $ i ++) {
3 echo $ i ;
4}
5f o r ( $ i = 1 ; ; $ i ++) {
6 i f ( $ i > 1 0 ) {
7 b r e a k;
8 }
9 echo $ i ;
10}
11$ i = 1 ;
12f o r ( ; ; ) {
13 i f ( $ i > 1 0 ) {
14 b r e a k;
15 }
16 echo $ i ;
17 $ i ++;
18}
19f o r ( $ i = 1 , $ j = 0 ; $ i <= 1 0 ; $ j += $ i , p r i n t $ i , $ i ++);
20?>
Estruturas de controle de fluxo
foreach
O foreach surge da necessidade de efetuar itera¸ c˜ oes sobre arrays de maneira r´ apida, simples e intuitiva. Observe o exemplo:
1<?php
2$ a r r = a r r a y( 1 , 2 , 3 , 4 ) ;
3f o r e a c h ( $ a r r a s &$ v a l u e ) {
4 $ v a l u e = $ v a l u e ∗ 2 ;
5}
6// $ a r r i s now a r r a y ( 2 , 4 , 6 , 8 )
7u n s e t( $ v a l u e ) ; // b r e a k t h e r e f e r e n c e w i t h t h e l a s t e l e m e n t
8?>
Estruturas de controle de fluxo
switch
1<?php
2i f ( $ i == 0 ) {
3 echo ” i e q u a l s 0 ” ;
4} e l s e i f ( $ i == 1 ) {
5 echo ” i e q u a l s 1 ” ;
6} e l s e i f ( $ i == 2 ) {
7 echo ” i e q u a l s 2 ” ;
8}
9
10s w i t c h ( $ i ) {
11 c a s e 0 :
12 echo ” i e q u a l s 0 ” ;
13 b r e a k;
14 c a s e 1 :
15 echo ” i e q u a l s 1 ” ;
16 b r e a k;
17 c a s e 2 :
18 echo ” i e q u a l s 2 ” ;
19 b r e a k;
20}
21?>
Fun¸c˜ oes
As fun¸c˜ oes PHP podem ser prototipadas.
Elas tamb´ em podem ser declatas com base em estruturas de controle de fluxo.
PHP possui suporte a fun¸ c˜ oes recursivas. Nenhum acr´ escimo a sintaxe ´ e necess´ ario.
1<?php
2$ m a k e f o o = t r u e;
3b a r ( ) ;
4i f ( $ m a k e f o o ) {
5 f u n c t i o n f o o ( )
6 {
7 echo ” I don ’ t e x i s t u n t i l p r o g r a m e x e c u t i o n r e a c h e s me .\n ” ;
8 }
9}
10i f ( $ m a k e f o o ) f o o ( ) ;
11f u n c t i o n b a r ( )
12{
13 echo ” I e x i s t i m m e d i a t e l y upon p r o g r a m s t a r t .\n ” ;
14}
15?>
Fun¸c˜ oes
Passagem de argumentos
Por default, a passagem de argumentos ´ e feita por valor
E poss´ıvel passar argumentos por referˆ ´ encia, de forma semelhante a C++
Tamb´ em ´ e permitido definir arugumentos default para m´ etodos
1<?php
2f u n c t i o n a d d s o m e e x t r a (& $ s t r i n g )
3{
4 $ s t r i n g .= ’ and s o m e t h i n g e x t r a . ’ ;
5}
6$ s t r = ’ T h i s i s a s t r i n g , ’ ;
7a d d s o m e e x t r a ( $ s t r ) ;
8echo $ s t r ;
9
10f u n c t i o n m a k e c o f f e e ( $ t y p e = ” c a p p u c c i n o ” )
11{
12 r e t u r n ” Making a cup o f $ t y p e .\n ” ;
13}
14echo m a k e c o f f e e ( ) ;
15echo m a k e c o f f e e ( n u l l ) ;
16echo m a k e c o f f e e ( ” e s p r e s s o ” ) ;
Orienta¸c˜ ao a objeto
Conceitos b´ asicos
A orienta¸c˜ ao a objeto ´ e baseada em trˆ es conceitos fundamentais:
heran¸ ca, polimorfismo e encapsulamento.
Heran¸ca ´ e a capacidade de determinadas classes se utilizarem de c´ odigo previamente definido para outras. Esse processo, al´ em de proporcionar reaproveitamento de c´ odigo, conecta em termos pr´ aticos, entidades semanticamente relacionadas.
Polimorfismo ´ e a capacidade que um mesmo m´ etodo possui de se modificar conforme o contexto
Encapsulamento ´ e um mecanismo de controle de acesso a entidades-membro das classes
Apesar de serem trˆ es defini¸ c˜ oes diferentes, elas est˜ ao intimamente
conectadas.
Orienta¸c˜ ao a objeto
1<?php
2c l a s s T e s t
3{
4 s t a t i c p u b l i c f u n c t i o n getNew ( )
5 {
6 r e t u r n new s t a t i c ;
7 }
8}
9
10c l a s s C h i l d e x t e n d s T e s t
11{}
12
13$ o b j 1 = new T e s t ( ) ;
14$ o b j 2 = new $ o b j 1 ;
15var dump( $ o b j 1 !== $ o b j 2 ) ;
16
17$ o b j 3 = T e s t : : getNew ( ) ;
18var dump( $ o b j 3 i n s t a n c e o f T e s t ) ;
19
20$ o b j 4 = C h i l d : : getNew ( ) ;
21var dump( $ o b j 4 i n s t a n c e o f C h i l d ) ;
22?>
Orienta¸c˜ ao a objeto
Construtores e destrutores
1<?php
2c l a s s B a s e C l a s s {
3 f u n c t i o n c o n s t r u c t ( ) {
4 p r i n t ” I n B a s e C l a s s c o n s t r u c t o r\n ” ;
5 }
6}
7c l a s s S u b C l a s s e x t e n d s B a s e C l a s s {
8 f u n c t i o n c o n s t r u c t ( ) {
9 p a r e n t : : c o n s t r u c t ( ) ;
10 p r i n t ” I n S u b C l a s s c o n s t r u c t o r\n ” ;
11 }
12}
13$ o b j = new B a s e C l a s s ( ) ;
14$ o b j = new S u b C l a s s ( ) ;
15c l a s s M y D e s t r u c t a b l e C l a s s {
16 f u n c t i o n c o n s t r u c t ( ) {
17 p r i n t ” I n c o n s t r u c t o r\n ” ;
18 $ t h i s−>name = ” M y D e s t r u c t a b l e C l a s s ” ;
19 }
20 f u n c t i o n d e s t r u c t ( ) {
21 p r i n t ” D e s t r o y i n g ” . $ t h i s−>name . ”\n ” ;
22 }