Você está na página 1de 86

Curso Introduo ao

Desenvolvimento Web
utilizando PHP
Criado por Igor Rafael e Fernando Pereira
10 passos
10 passos
1. Tecnologias, Ferramentas e Possibilidades
2. A linguagem

3. Aplicativos Web
4. Backend (ou interao com o servidor)
5. Frontend (ou apresentao)

6. Banco de dados
7. CRUD
8. Autenticao e Autorizao (sesses e cookies)

9. Upload de Arquivos e envio de emails


10. Ecossistema e bootstraps
Premissas do curso
Premissas do curso
Lgica de programao
Premissas do curso
Alguma experincia com alguma linguagem de progamao
Premissas do curso
Vivncia Web (navegao, servidor, tempo de espera, fora do ar)
1) Tecnologias, Ferramentas e
Possibilidades
Tecnologias
PHP

http://www.php.net/
Sempre consulte a documentao oficial
Se estiver em dvida recorra ao PHP do jeito certo
MySQL

SGBD - Sistema de Gerenciamento de Banco de Dados


Linguagem SQL
http://www.mysql.com
Apache

Servidor Web
Aciona execuo do PHP
http://www.apache.org
HTML

Linguagem de marcao
Estrutura a informao
http://www.w3.org/community/webed/wiki/HTML
JavaScript (JS)

Comportamento
Interao
https://developer.mozilla.org/pt-BR/docs/JavaScript
Referncias perigosas
Fuja do W3Schools!
Veja mais em W3Fools
Ferramentas
Editores e IDEs
Debuggers
Testes
Modelagem
entre outras
Editores e IDEs
SublimeText
Eclipse+PDT(PHP Development Tools)
Aptana
Zend Studio (Free 30-days trial)
PHPStorm (Free 30-days trial)
XDebug

Breakpoints, StackTraces, Code Coverage Analysis, Profilling, Remote


Debugging
Possui clientes para vrios editores, IDEs e navegadores:
SublimeText
Eclipse
Outros clientes
PHP Debug Bar
FirePHP (Firebug)
Extenso para o firefox+firebug
PHPUnit
Framework de testes
<?php
class MoneyTest extends PHPUnit_Framework_TestCase {
public function testCanBeNegated() {
$a = new Money(1);

$b = $a->negate();

$this->assertEquals(-1, $b->getAmount());
}
/*(...)*/
}

phpunit --bootstrap src/autoload.php tests/MoneyTest


PHPUnit 4.1.0 by Sebastian Bergmann.

....................

Time: 121 ms, Memory: 4.50Mb

OK (20 tests, 39 assertions)


MySQL Workbench
Instalao
Apache/MySQL/PHP
Ubuntu
sudo apt-get install php5 mysql-server php5-mysql
# desativar o incio automtico do apache e do mysql
sudo update-rc.d -f apache2 remove
sudo update-rc.d -f mysql remove
# inicio manual
sudo service apache2 start
# trmino manual
sudo service apache2 status

Windows (XAMPP)
Certifique-se de estar
utilizando a verso estvel atual
do PHP (5.5+)
O PHP fez grandes avanos adicionando novas funcionalidades
poderosas nos ltimos anos. No deixe que a pequena diferena entre
os nmeros decimais das verses 5.2 a 5.5 o enganem, elas
representam grandes melhorias.
Possibilidades
Pginas estticas geradas pelo
PHP
PHP+HTML+CSS

Parte do HTML gerado pelo PHP


Reso do HTML
Exemplo: geradores de pginas estticas
Pginas dinmicas geradas pelo
PHP
PHP+HTML+CSS+JS
Contedo das pginas muda conforme interao com usurio
Exemplo: blogs, aplicativos web, portais de notcias, etc
API em PHP
PHP + HTTP + (JSON, XML, SOAP)

Responde consultas com dados, templates html, etc


No renderiza uma pgina completa
Interage bem com vrias abordagens:
Outros aplicativos PHP
AngularJS
Backbone.js
Ember.js
entre outros
2) A Linguagem
PHP
PHP uma linguagem de propsito geral
Mas especialmente adequada ao desenvolvimento web
Guia de referncia da linguagem

Voc pode testar todos os exemplos online:


http://writecodeonline.com/php
Sintaxe bsica
Tag: text envolvido por <e >
<curso-PHP>

apenas cdigo entre as tags <?phpe ?> interpretado, todo resto


ignorado:
<?php
echo "Gerado pelo PHP!";
?>

Texto ignorado pelo PHP!

separadores de instruo: ;

Saiba mais sobre a instruo echo


Modo abreviado
Combina a instruo echocom as tags <?phpe ?>

<?="Gerado pelo PHP!"?>

Texto ignorado pelo PHP!

equivalente a:
<?php
echo "Gerado pelo PHP!";
?>

Texto ignorado pelo PHP!


Use quantas tags precisar
<?php
echo "Gerado";
?>

pelo (s que no...)

<?php
echo "PHP";
?>

Mais uma vez ignorado pelo PHP!


Tipos primitivos (alguns)
Booleano (case-insensitive):
True, False, TRUE, FALSE, TrUe, FALse

Inteiro (bases 2, 8, 10 e 16):


0b0101, 0123, 1234, -123, 0x1A

Ponto flutuante (float):


1.234, 1.2e3, 7E-10, NAN

Cadeias de caracteres (strings):


'Hello World', "Hello World"
Arranjos (arrays)
<?php
var_dump(array("a", "b", "c", "d", "e", "f", "a"=> 5, array(1,2,3)));
var_dump([0, -1 => 5, 2, 3]); //php 5.4+
?>

Saiba mais sobre tipos primitivos do PHP


Identificadores
nomear variveis, classes, funes, etc
foo, bar, _foo, _1234

Regra:
[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]

obs: (0x7f-0xff) so os caracteres de 127 a 255


Dicas ao nomear identificadores
nomes de funes em minsculo com underscore entre palavras
nomes de classes em PascalCase
nomes de mtodos e atributos em camelCase
iteradores e excees recebem os sufixos "Iterator" e "Exception"
nomes que comeam com __ (dois 'underscore' seguidos) so mgicos
(e.g. __get)
Variveis
<?php
$mensagem = "Gerado pelo PHP!";

echo $mensagem;
?>
Variveis
$ seguido de um identificador
$foo, $bar, $_foo, $_1234, $this

$this uma varivel especial e no pode ser alterada

existem a partir da primeira inicializao


<?php
$foo = "I'm alive";
$bar = 5;
?>

variveis pr-definidas (algumas)


$GLOBALS, $_SERVER, $_GET, $_POST, $_FILES, $_SESSION, $_COOKIE
Variveis e seus tipos
<?php
//cadeia de caracteres (string)
$mensagem = "Gerado pelo PHP!";
//inteiro
$dias = 7;
//ponto flutuante (float)
$distancia = 35.89;
//booleano (boolean)
$estaChovendo = false;
//arranjo (array) de strings
$nomes = ['Joo', 'Jos', 'Maria'];

print_r($nomes);
?>

Saiba mais sobre a instruo print_r


Variveis e seus tipos
no podem ser explicitados na declarao
determinado pelo contexto
<?php
$foo = "0";
// $foo inicializada como string (ASCII 48)
$foo += 2;
// $foo agora um inteiro (2)
$foo = $foo + 1.3;
// $foo se tornou um float (3.3)
$foo = 5 + "10 Little Piggies";
// $foo novamente um inteiro (15)
$foo = 5 + '10 Small Pigs';
// $foo ainda um inteiro (15)
?>
Variveis variveis
O nome de uma varivel pode ser formado pelo contedo de outra
<?php
$a = 'hello';

$$a = 'world'; //ou ${$a} = 'world';

echo $hello, "\n"; //imprime 'world'

echo "$a ${$a}"; //imprime 'hello world'


?>

Saiba mais sobre variveis variveis


Constantes
<?php
// nomes validos
define("FOO", "something");
define("FOO2", "something else");
define("FOO_BAR", "something more");

echo FOO;

// nome invalido
define("2FOO", "something");

?>
Operadores
Atribuio
<?php
$variavel = 1; //valor
$variavel = 35 * 234 - 1; //expressao
$variavel = somatorio(10); //retorno de uma funcao
?>
Operadores aritmticos
<?php
$a = 8; $b = 7;

//Negao
var_dump(-$a);
//Adio
var_dump($a + $b);
//Subtrao
var_dump($a - $b);
//Multiplicao
var_dump($a * $b);
//Diviso
var_dump($a / $b);
//Resto da diviso
var_dump($a % $b);
?>

Saiba mais sobre a funo var_dump


Operadores bitwise
<?php
$a = 256; $b = 3;

//And
echo $a & $b, "\n";
//Or (or inclusivo)
echo $a | $b, "\n";
//Xor (or exclusivo)
echo $a ^ $b, "\n";
//Not
echo ~ $a, "\n";
//Shift a esquerda
echo $a << $b, "\n";
//Shift a direita
echo $a >> $b, "\n";
?>
Operadores de comparao
<?php
$a = 8; $b = "8";

var_dump($a == $b); //Igual (desconsidera o tipo das variveis)


var_dump($a === $b); //Idntico
var_dump($a != $b); //Diferente (desconsidera o tipo das variveis)
var_dump($a <> $b); //Diferente (desconsidera o tipo das variveis)
var_dump($a !== $b); //No idntico

var_dump($a < $b); //Menor


var_dump($a > $b); //Maior
var_dump($a <= $b); //Menor ou igual
var_dump($a >= $b); //Maior ou igual
?>
Operadores de incremento e
decremento
<?php
$a = 10;

//ps-incremento
var_dump($a++); //faz $a = 11, mas imprime 10
//pre-incremento
var_dump(++$a); //faz $a = 12, e imprime 12
//ps-decremento
var_dump($a--); //faz $a = 11, e imprime 12
//pre-decremento
var_dump(--$a); //faz $a = 10, e imprime 10
?>
Operadores lgicos
<?php
$a = true; $b = false;

var_dump($a and $b); //And


var_dump($a or $b); //Or
var_dump($a xor $b); //Xor
var_dump(! $a); //Not
var_dump($a && $b); //And
var_dump($a || $b); //Or
?>
Operadores de string
<?php
$a = "Hello ";
$b = $a . "World!"; // $b contm "Hello World!"
echo $b, "\n";

$a = "Hello ";
$a .= "World!"; // agora $a contm "Hello World!"
echo $a, "\n";
?>
Operadores de array
<?php
$a = [1, 2, 3, "12" => "b"];
$b = [1, "2", 3, 12 => "b"];

var_dump($a + $b); //Unio


var_dump($a == $b); //Iguais, TRUE se $a e $b possuem o mesmo contedo.
var_dump($a === $b); //Idnticos (considera o tipo)
var_dump($a != $b); //Diferentes
var_dump($a <> $b); //Diferentes
var_dump($a !== $b); //No idnticos (considera o tipo)
?>

Veja a tabela de precedncia dos operadores


Estruturas de controle
If-else
<?php
if ($idade < 18) {
echo "Menor de idade";
} elseif ($idade == 18) {
echo "Tem 18 anos";
} else {
echo "Tem mais de 18 anos";
}
?>
Estruturas de controle
If-else alternativo
<?php
if ($idade < 18):
echo "Menor de idade";
elseif ($idade == 18):
echo "Tem 18 anos";
else:
echo "Tem mais de 18 anos";
endif;
?>
Operador ternrio
<?php
echo ($idade < 18 ?
"Menor de idade"
: ($idade == 18 ?
"Tem 18 anos"
: "Tem mais de 18 anos"
)
);
?>
Estruturas de controle
Switch
<?php
$opc = 2;

switch ($opc) {
case 1:
echo "Cachorro Quente";
break;
case 2:
echo "X-Salada";
break;
case 3:
echo "Tudo";
break;
default:
echo "Nao escolhi nada";
}
?>
Estruturas de controle
Switch (usando strings)
<?php
switch ($i) {
case "maa":
case "laranja":
echo "fruta";
break;

case "torta":
echo "no fruta";
break;
}
?>
Estruturas de controle
While
<?php
$i = 1;

while ($i <= 5) {


echo "$i-esima impressao... \n";
$i++;
}

echo "Fim";
?>
Estruturas de controle
Do-while
<?php
$i = 1;

do {
echo "$i-esima impressao... \n";
$i++;
} while ($i <= 5);

echo "FIM";
?>
Estruturas de controle
While vs Do-while
<?php
$i = 10;

while ($i <= 5) {


echo "Esse codigo nunca sera executado.\n";
}

do {
echo "Esse codigo sera executado uma vez.";
} while ($i <= 5);
?>
Estruturas de controle
For
<?php
for ($i=1; $i<=5; $i++) {
echo "$i-esima impressao... \n";
}

echo "FIM.";
?>
Estruturas de controle
Foreach (apenas para arrays e objetos)
<?php
$numeros = array("dois", "um", "trs");

foreach ($numeros as $numero) {


echo $numero . "\n";
}
?>
Estruturas de controle
Break
<?php
$i = 0;

while (++$i) {
switch ($i) {
case 5:
echo "No 5\n";
break; /*ou 'break 1;' sai apenas do switch. */
case 10:
echo "No 10; saindo!\n";
break 2; /* Termina o switch e o while. */
default:
break;
}
}
?>
Estruturas de controle
Continue
<?php
$i = 0;

while ($i++ < 5) {


echo "While externo.\n";
while (1) {
echo "While do meio.\n";
while (1) {
echo "While mais interno.\n";
continue 3;
}
echo "Nunca serei impresso...\n";
}
echo "Eu tambm no...\n";
}
?>

Saiba mais sobre estruturas de controle no PHP


Funes
Definindo uma nova funo
<?php
function functionName($param1, $param2, ...) {
/*codigo a ser executado;*/
}
?>

Como execut-la
<?php
functionName($value1, $value2, ...);
?>
Funes
Exemplo: somatrio
<?php
function somatorio($N)
{
$sum = 0;

for($i = 1; $i <= $N; $i++) {


$sum += $i;
}

return $sum;
}
?>

Como execut-la
<?php
echo somatorio(100);
?>
Classes
<?php
class UmaClasseSimples
{
// declarao de atributos
public $var = 'valor default do atributo';

// declarao de um mtodo
public function imprimeVar() {
echo $this->var;
}
}
?>
Objetos
<?php
$objeto = new UmaClasseSimples();

//O nome da classe pode estar armazenado em uma varivel


$classe = 'UmaClasseSimples';
$objeto = new $classe(); // equivalente a 'new UmaClasseSimples()'
?>
Herana
<?php
class UmaClasseExtendida extends UmaClasseSimples
{
// redefine e mtodo da classe pai
function imprimeVar() {
echo "Verso extendida\n";
parent::imprimeVar();
}
}

$objeto = new UmaClasseExtendida();


$objeto->imprimeVar();
?>
Constantes de Classe
<?php
class OutraClasseSimples {
const umaConstante = 'valor default para umaConstante';

function imprimirConstante() {
echo "Vindo do mtodo imprimirConstante: ";
echo self::umaConstante, "\n";
}
}

echo OutraClasseSimples::umaConstante, "\n";

$obj = new OutraClasseSimples();


echo $obj->imprimirConstante();
?>
Construtores e destrutores
<?php
class MaisUmaClasse {
function __construct() {
print "Construindo objeto.\n";
$this->name = "MaisUmaClasse";
}

function __destruct() {
print "Destrundo objeto " . $this->name . "\n";
}
}

$obj = new MaisUmaClasse();


?>
Visibilidade
<?php
class OutraClasse {
public $public = 'Public';
protected $protected = 'Protected';
private $private = 'Private';

function printHello() {
echo $this->public;
echo $this->protected;
echo $this->private;
}
}
$obj = new OutraClasse();
echo $obj->public, "\n"; // Acesso permitido
echo $obj->protected; // Erro fatal, interrompe execuo
$obj->printHello();
?>
Composio de arquivos
<?php
include('nome_do_arquivo.php'); //inclui e interpreta o arquivo
require('nome_do_arquivo.php'); //interrompe o script se encontrar erros

include_once('nome_do_arquivo.php'); //checa se o arquivo j foi incluido antes


require_once('nome_do_arquivo.php');
?>
Exemplo: Calendrio
Imprimir um calendrio na tela.
Data atual
<?php
//time() retorna o timestamp Unix atual
$dataAtual = time();

//Separa o dia, ms e ano da data atual


$diaAtual = date('d', $dataAtual);
$mesAtual = date('m', $dataAtual);
$anoAtual = date('Y', $dataAtual);
?>

Saiba mais sobre as funes time() e date()


Mais informaes sobre a data
atual
<?php
//(...)
//gera o timestamp da data correspondente ao primeiro dia do ms atual
$primeiroDiaMes = mktime(0, 0, 0, $mesAtual, 1, $anoAtual);
//recupera o nome do ms atual
$nomeMesAtual = date('F', $primeiroDiaMes);
//recupera o dia da semana correspondente ao primeiro dia do ms atual
$diaSemanaPrimeiroDiaMes = date('D', $primeiroDiaMes);
//quantos dias o ms atual possui
$diasNoMes = cal_days_in_month(0, $mesAtual, $anoAtual);
?>

Saiba mais sobre as funes mktime() e cal_days_in_month()


Espaos vazios no incio do
calendrio
<?php
//(...)
switch($diaSemanaPrimeiroDiaMes){
case "Sun": $vazio = 0; break;
case "Mon": $vazio = 1; break;
case "Tue": $vazio = 2; break;
case "Wed": $vazio = 3; break;
case "Thu": $vazio = 4; break;
case "Fri": $vazio = 5; break;
case "Sat": $vazio = 6; break;
}
?>
Cabealho do calendrio
(HTML)
<!-- (...) -->
<table border="1" width="294">
<tr>
<th colspan="7"><?=$nomeMesAtual?> <?=$anoAtual?></th>
</tr>
<tr>
<td style="text-align:center;" width="42">S</td>
<td style="text-align:center;" width="42">M</td>
<td style="text-align:center;" width="42">T</td>
<td style="text-align:center;" width="42">W</td>
<td style="text-align:center;" width="42">T</td>
<td style="text-align:center;" width="42">F</td>
<td style="text-align:center;" width="42">S</td>
</tr>
Imprime os espaos em branco
no incio do calendrio
<?php
//(...)
//conta os dias da semana
$diaSemana = 1;
?>
<tr>
<?php
//espaos vazio no incio do calendrio
while($vazio > 0) {
?>
<td></td>
<?php
$vazio = $vazio-1;
$diaSemana++;
}
Imprime as semanas e seus dias
<?php
$dia = 1; //incio do ms

//percorre todos os dias do ms


while($dia <= $diasNoMes) {
$estilo = "text-align:center;";

if($diaAtual == $dia) {
$estilo .= " background-color:red;";
}
?> <td style="<?=$estilo?>"><?=$dia?></td><?php
$dia++;
$diaSemana++;
//(...)nova linha para a prxima semana (prximo slide)(...)
}
Nova linha para a prxima
semana
<?php
//(...)
//nova linha para a prxima semana
if ($diaSemana > 7) {
?>
</tr>
<tr>
<?php
$diaSemana = 1;
}
//(...)
?>
Gran finale
<?php
//(...)
//preenche os espaos em branco ao final do calendrio
while($diaSemana > 1 && $diaSemana <=7) {
?>
</td>
<td>
<?php
$diaSemana++;
}
?>
</tr>
</table>
Como ficou

(gerado no dia 09/05/2014)


Prximas aulas
Passos 3 a 10

Os slides e as listas de exerccios sero enviadas por email


Exerccios - parte 1
1. Crie um script que gere o nmero de dias que j se passaram desde
que o ano comeou. Obs: Utilize a funo date.
2. Crie um script em PHP que gere e imprima 20 valores aleatrios,
entre 100 - 200. Obs: Utilize um do while
3. Crie um script em PHP que crie um arranjo com 20 valores aleatrios,
entre 0 - 5, e os imprima juntamente com o nmero de vezes em que
o valor aparece no arranjo. Obs: utilize um do-while
4. Crie um script em PHP crie dois vetores de 10 posies preenchidos
com valores aleatrios e faaa a soma dos elementos de mesmo
ndice, colocando o resultado em um terceiro vetor. Imprime os trs
vetores, um aps o outro. Obs: Utilize um for
5. Crie um script que crie um vetor de 50 posies com nmeros inteiros
aleatrios, entre 1 - 50 e divida todos os seus elementos pelo maior
valor do vetor. Imprima o vetor antes e aps aa diviso. Obs: utilize a
funo max do PHP
Exerccios - parte 2
1. Crie um script que dado uma string, armazenada em uma varivel,
contendo o CPF de uma pessoa realize a validao do CPF. Imprima
vlido/invlido dependendo do resultado da validao.
2. Crie uma funo validaCPF a partir do exerccio anterior que receba o
CPF e retorne um booleano com o resultado da validao.
3. Crie um script que dado uma string, armazenada em uma varivel,
contendo um nmero de telefone valide o padro (XX) XXXX-XXXX ou
(XX) XXXXX-XXXX, para nmeros de 8 ou 9 dgitos mais DDD. Obs:
coloque a validao dentro de uma funo, semelhante ao exerccio
anterior
4. Altere o exemplo do calendrio para imprimir os ltimos dias do ms
anterior e os primeiros dias do prximo ms ao invs dos espaos em
branco.
Fim

Você também pode gostar