SlideShare une entreprise Scribd logo
1  sur  166
Télécharger pour lire hors ligne
CURSO INTRODUTÓRIO
DE PHP

Friday, October 4, 13
ADIR KUHN
•Desenvolvedor
•Certificado Zend (ZCE)
•Certificado Scrum Master
•Formado em PD
•Evangelista PHP e Python
Dúvidas
@adirkuhn
adirkuhn@gmail.com
Friday, October 4, 13
O QUE É PHP?
• Umas das linguagens mais populares para criação de
aplicações web
• Open-source
• Linguagem Interpretada (não é compilada)
• Simples de aprender (baixa curva de aprendizado)
• Fácil para dar um tiro no pé

Friday, October 4, 13
O QUE É PHP?

fonte: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
Friday, October 4, 13
BREVE HISTÓRICO
•1995: Rasmus Lerdorf criou o PHP

- criado para deixar dinâmico seu próprio site;
- chamado inicialmente de Personal Home Page;
•1997: Zeev Zuraski e Andi Gutmans
- reescrita do parser do PHP v3
- projeto renomeado para PHP: Hypertext Preprocessor
• 1998: Zeev Zuraski e Andi Gutmans
- redesign do parser para o PHP v4 (Zend Engine)
- fundada a Zend Technologies

Friday, October 4, 13
PHP
O PHP foi construido para ser programado de forma
estruturada.
O suporte a Objetos foi adicionado na versão 4
O suporte a Objetos foi totalmente remodelado na v5

Friday, October 4, 13
QUEM USA PHP
PHP é uma das linguagens mais usadas no desenvolvimento
web. Algumas empresas que utilizam:
Yahoo!
Flickr
Wikipedia
Digg
Dailymotion

Friday, October 4, 13
COMEÇANDO
Requisitos mínimos para começar a programar em PHP:
Ter instalado o interpretador PHP;
Um editor de textos;
Ter preferencialmente instalado um servidor web
LAMP, WAMP, etc

Friday, October 4, 13
POR ONDE COMEÇAR

O site do PHP conta com uma documentação completa
da linguagem. (www.php.net)
Friday, October 4, 13
PRIMEIRO SCRIPT
Criar um documento com extensão PHP no servidor web.
<?php
echo ‘Ola Mundo.’;
?>

Friday, October 4, 13
O QUE ACONTECEU?
Todos os comandos PHPs devem ficar dentro das tags
<?php e ?>
O interpretador do PHP analiza os comandos dentro das tags e
executa.
No caso o comando echo exibe uma mensagem na tela.
Cusiosidade: tanto o echo quanto o print exibem uma mensagem na tela mas o echo é um
construtor de linguagem e o print é uma função.
Friday, October 4, 13
SINTAXE BÁSICA
O PHP é uma linguagem interpretada e irá executar tudo entre as
tags <?php ?>
<p>Isto vai ser ignorado.</p>
<?php echo 'Enquanto isto vai ser interpretado.'; ?>
<p>Isto também vai ser ignorado.</p>

Todos os comando PHP devem terminar com ; (ponto e vírgula)

Friday, October 4, 13
EXERCÍCIO
Criar um script em PHP que mostre a mensagem ‘Olá Mundo’.

Friday, October 4, 13
COMENTÁRIOS
O PHP suporta vários tipos de comentários
<?php
echo 'Isto é um teste';//Comentário de uma linha em c++
/* Este é um comentário de múltiplas linhas
       ainda outra linha de comentário */
echo 'Isto é ainda outro teste';
echo 'Um teste final';#Comentário estilo shell 1 linha
?>

Friday, October 4, 13
VARIÁVEIS
Variáveis são formas de representar valores
Para definir uma variável basta colocar um simbolo de cifrão ($)
seguido de um nome.
$idade = 25;
Assim esta definido a variável $idade com o valor 25.

Friday, October 4, 13
VARIÁVEIS
No PHP não é necessário setar o tipo da variável, ela é definida
pelo interpretador na hora da execução.
<?php
$var = 'João'; //Tipo string
$var = 1; //Tipo integer
$var = false; //Tipo boolean
?>

As variáveis devem obrigatóriamente começar com uma letra ou
sublinhado (_)
<?php
$nome = 'João'; //Variável válida
$2nome = ‘Maria’; //Inválida
$_r = false; //Válida
?>
Friday, October 4, 13
TIPOS DE DADOS
Agora que vimos um pouco sobre variáveis, vamos ver que tipos
de dados o PHP suporta.
O PHP possui oito tipos de dados:
4 básicos: integer, boolean, string, float
2 compostos: array, object
2 tipos especiais: resource, NULL
Friday, October 4, 13
BOOLEAN
O tipo BOOLEAN é o mais simple do PHP representa somente os
valores true / false (verdadeiro / falso)
<?php
$foo = True; // atribui o valor True para $foo
$bar = False; // atribui o valor True para $foo
?>

O PHP não diferencia maiusculas de minusculas ao atribuir os
valores true ou false, sendo que True, TRUE, true são o mesmo
valor se tratando de boleanos.
Friday, October 4, 13
INTEGER
O tipo INTEGER representa números inteiros
<?php
$a = -10;
$b = 45;
?>

O tamanho máximo de um inteiro depende da plataforma.
PHP não suporta inteiros sem sinal (UNSIGNED)
O valor máximo de um inteiro pode ser obtido com a constante
PHP_INT_MAX
Friday, October 4, 13
FLOAT
O tipo FLOAT serve para armazenar números de ponto flutuante
(doubles ou números reais)
<?php
$a = 1.98;
$bar = 1002.25;
?>

Para separar os valores é utilizado . ponto (separador decimal)

Friday, October 4, 13
STRING
O tipo STRING é utilizado para representar um conjunto de
caracteres. Não existe limite para esse tipo, a limitação é a
quantidade de memória no servidor.

<?php
$a = “Minha String bonita”;
$nome = “Meu nome é João”;
?>

Friday, October 4, 13
ARRAY
Um dos tipos de dados mais poderoso do PHP.
É um tipo de dado composto.
Um array no PHP é um mapa ordenado que relaciona chaves para
valores.
Estrutura de um array
array( chave => valor
, ...
)
// chave pode ser tanto string ou um integer
// valor pode ser qualquer coisa

Friday, October 4, 13
ARRAY
Para definir um array podemos usar o construtor array()

<?php
$arr = array("foo" => "bar", 12 => true);
echo $arr["foo"]; // bar
echo $arr[12];    // 1
?>

Friday, October 4, 13
ARRAY
Também é possivel criar arrays dentro de array

<?php
$arr = array("chave" => array(6 => 5, 13 => 9, "a" => 42));
echo $arr["chave"][6];    // 5
echo $arr["chave"][13];   // 9
echo $arr["chave"]["a"];  // 42
?>

Friday, October 4, 13
ARRAY
Se for omitido a chave quando você adiciona um novo item ao
array, o maior indice inteiro é obtido e a nova chave será esse
maior número + 1

<?php
// Esse array é como ...
array(5 => 43, 32, 56, "b" => 12);
// ... este array
array(5 => 43, 6 => 32, 7 => 56, "b" => 12);
?>

Friday, October 4, 13
OBJECT
O tipo OBJECT é usado para representar instâncias de classes. É
criado através da expressão new

<?php
$obj = new Classe();
?>

Mais detalhes serão vistos na aula de orientação a objetos.
Friday, October 4, 13
VARIÁVEIS E CONSTANTES
Recapitulando, variáveis são usadas para armazenar os mais váriados
tipo de dados, podendo ser inteiro, float, string, array, etc. Seu valor
pode ser alterado a qualquer ponto no programa

<?php
$a = 1.98; //$a é um float
$a = “pato”; //$a agora é uma string
?>

Friday, October 4, 13
VARIÁVEIS E CONSTANTES
Também temos as CONSTANTES. Elas funcionam como variáveis,
podendo armazenar qualquer tipo de dado, a única diferença é que
os valores das CONTANTES são IMUTÁVEIS, ou seja, não muda
no decorrer da aplicação
<?php
// Nomes de constantes válidos
define("FOO",     "alguma coisa");
define("FOO2",    "alguma outra coisa");
define("FOO_BAR", "alguma coisa mais");
// Nomes de constantes inválidas
define("2FOO",    "alguma coisa");
// Isto é válido, mas deve ser evitado:
// O PHP pode vir a fornercer uma constante mágica
// que danificará seu script
define("__FOO__", "alguma coisa");
?>
Friday, October 4, 13
EXERCÍCIO
Criar um novo arquivo para exibir a mensagem “Ola Mundo” mas
utilizando uma váriavel e outra utilizando uma constante

Friday, October 4, 13
OPERADORES ARITMÉTICOS
Assim como todas as linguagens de programação o PHP também
possui operadores aritméticos.
Exemplo

Resultado

-$a

Negação

Oposto de $a

$a + $b

Adição

Soma de $a e $b

$a - $b

Subtração

Diferença entre $a e $b

$a * $b

Multiplicação

Produto de $a e $b

$a / $b

Divisão

Quociente de $a e $b

$a % $b

Friday, October 4, 13

Nome

Módulo

Resto de $a dividido por $b
OPERADORES DE
ATRIBUIÇÃO
O operador básico de atribuição é o “=”. Não significa igual, mas
que que o operador da esquerda recebe o valor da expressão da
direita

<?php
$a = ($b = 4) + 5; /* $a configurado para 9 e $b configurado como 4.*/
?>

Friday, October 4, 13
OPERADORES DE
ATRIBUIÇÃO
O operador básico de atribuição é o “=”. Não significa igual, mas
que que o operador da esquerda recebe o valor da expressão da
direita

<?php
$a = ($b = 4) + 5; /* $a configurado para 9 e $b configurado como 4.*/
?>

Friday, October 4, 13
OPERADORES DE
COMPARAÇÃO
Permite a comparação de dois valores o resultado sera verdadeiro
ou falso
Exemplo

Resultado

$a == $b

Igual

Verdadeiro (TRUE) se $a for igual a $b

$a === $b

Idêntico

Verdadeiro (TRUE) se $a for igual a $b e forem do mesmo tipo

$a != $b

Diferente

Verdadeiro (TRUE) se $a for diferente de $b

$a <> $b

Diferente

Verdadeiro (TRUE) se $a for diferente de $b

$a !== $b

Não idêntico

Verdadeiro se $a não for igual e $b ou não forem do mesmo tipo

$a < $b

Menor que

Verdadeiro se $a for menor que $b

$a > $b

Maior que

Verdadeiro se $a for maior que $b

$a <= $b

Menor ou igual

Verdadeiro se $a for menor ou igual a $b

$a >= $b

Friday, October 4, 13

Nome

Maior ou igual

Verdadeiro se $a for maior ou igual a $b
OPERADORES DE
INCREMENTO
O PHP suporta operadores de pré e pós-incremento no estilo
C/C++

Exemplo

Efeito

++$a

Pré-incremento

Incrementa $a em 1 e retorna $a

$a++

Pós-incremento

Retorna $a e então incrementa $a em 1

--$a

Pré-decremento

Decrementa $a em 1 e então retorna $a

$a--

Friday, October 4, 13

Nome

Pós-decremento

Retorna $a e então decrementa $a em 1
OPERADORES DE
INCREMENTO/DECREMENTO
Exemplos
<?php
echo "<h3>Pós incremento</h3>";
$a = 5;
echo "Deve ser 5: " . $a++ . "<br />n";
echo "Deve ser 6: " . $a . "<br />n";
echo "<h3>Pré incremento</h3>";
$a = 5;
echo "Deve ser 6: " . ++$a . "<br />n";
echo "Deve ser 6: " . $a . "<br />n";
echo "<h3>Pós decremento</h3>";
$a = 5;
echo "Deve ser 5: " . $a-- . "<br />n";
echo "Deve ser 4: " . $a . "<br />n";
echo "<h3>Pré decremento</h3>";
$a = 5;
echo "Deve ser 4: " . --$a . "<br />n";
echo "Deve ser 4: " . $a . "<br />n";
?>
Friday, October 4, 13
OPERADORES LÓGICOS
Permite a comparação de dois valores boleanos, obtendo como
resposta verdadeiro ou falso
Exemplo

Resultado

$a and $b

E

Verdadeiro (TRUE) se $a e $b forem verdadeiros.

$a && $b

E

Verdadeiro (TRUE) se $a e $b forem verdadeiros.

$a or $b

OU

Verdadeiro se $a ou $b forem verdadeiros.

$a || $b

OU

Verdadeiro se $a ou $b forem verdadeiros.

! $a

NÃO

Verdadeiro se $a for falso

$a xor $b

Friday, October 4, 13

Nome

XOR

Verdadeiro se $a ou $b são verdadeiros mas não ambos
OPERADORES LÓGICOS
Exemplos
<?php
// $a será false
$a = (false && false);
// $b será false
$b = (true  && false);
// $c será verdadeiro
$c = (true && true);
// $d será verdadeiro
$d = (true  and  true);
//$e sera true
$e = false || true;
// $f sera true
$f = false or true;
?>

Friday, October 4, 13
OPERADORES DE STRING
Os operadores de string permiter concatenar (juntar) duas strings
é utilizado o . (ponto) ou .=

<?php
$a = "Olá ";
$b = $a . "mundo!"; // agora $b contém "Olá mundo!"
$a = "Olá ";
$a .= "mundo!";// agora $a contém "Olá mundo!"
//é igual a $a = $a . “mundo” --> $a = “Olá “ . “mundo!”
?>

Friday, October 4, 13
OPERADORES DE ARRAY
Segue a lista de operadores de arrays
Exemplo

Nome

Resultado

$a + $b

União de $a e $b

$a == $b

Igualdade

TRUE se $a e $b tiverem os mesmos pares de chave/
valor

$a === $b

Identico

TRUE se $a e $b tem os mesmos pares de chave/valor
na mesma ordem e do mesmo tipo.

$a != $b

Desigualdade

TRUE se $a for diferente de $b

$a <> $b

Desigualdade

TRUE se $a for diferente de $b

$a !== $b

Friday, October 4, 13

União

Não Identico

TRUE se $a não for identico a $b
OPERADORES DE ARRAY
Exemplo de união

<?php
$a = array("a" => "maçã", "b" => "banana");
$b = array("a" =>"pêra", "b" => "framboesa", "c" => "morango");
$c = $a + $b; // Uniao de $a e $b
echo "União de $a e $b: n";
var_dump($c);
$c = $b + $a; // União de $b e $a
echo "União de $b e $a: n";
var_dump($c);
?>

Friday, October 4, 13
OPERADORES DE ARRAY
Exemplo de igualdade

<?php
$a = array("maçã", "banana");
$b = array(1 => "banana", "0" => "maçã");
var_dump($a == $b); // bool(true)
var_dump($a === $b); // bool(false)
?>

Friday, October 4, 13
EXERCÍCIOS
Tendo $x=10; e $y=7; escreva um código que imprima o seguinte
resultado.
10
10
10
10
10

+ 7 = 17
-7=3
* 7 = 70
/ 7 = 1.4285714285714
%7=3

Utilize os operadores aritméticos.
Não imprima o texto, use as variáveis $x e $y e uma terceira para
o como $resultado.
Friday, October 4, 13
EXERCÍCIOS
Crie uma variável chamada $valor imprima e seguinte texto.
(Faça as operações citadas)
Valor é 8.
Adicione 2. Valor agora é 10.
Subtraia 4. Valor agora é 6.
Multiplique por 5. Valor agora é 30.
Divida por 3. Valor agora é 10.
Incremente em 1. Valor agora é 11.
Decremente em 1. Valor agora é 10.

Friday, October 4, 13
EXERCÍCIOS
Crie uma variável chamada $valor imprima e seguinte texto.
(Faça as operações citadas)
Valor é 8.
Adicione 2. Valor agora é 10.
Subtraia 4. Valor agora é 6.
Multiplique por 5. Valor agora é 30.
Divida por 3. Valor agora é 10.
Incremente em 1. Valor agora é 11.
Decremente em 1. Valor agora é 10.

Friday, October 4, 13
EXERCÍCIOS
Crie uma variável chamada de $certo=”certo”; e imprima a
seguinte frase usando contatenação de string com a variável $certo.

Quando é pra dar certo, vai dar certo!

Friday, October 4, 13
EXERCÍCIOS
Crie uma variável chamada $valor e atribua tipos de dados para
imprimir esse resultado.
Dica: a função que retorna o tipo de dado é gettype($var)
Dica: use concatenação de string
$valor
$valor
$valor
$valor
$valor

Friday, October 4, 13

é
é
é
é
é

string.
double.
boolean.
integer.
NULL.
ESTRUTURAS DE CONTROLE
IF/ELSE
O construtor if é um dos recursos mais importantes em várias
linguagens de programação, PHP inclusive. Ele permite a execução
condicional de um trecho de código.
Estrutura do if
if (expressao)
codigo a ser executado

O código é executado caso a expressão seja verdadeira (true)

Friday, October 4, 13
ESTRUTURAS DE CONTROLE
IF/ELSE
A expressao na condicional é avaliada como um valor boleano,
executando o código caso o valor da expressão seja verdadeiro.
Exemplo
<?php
if ($a > $b)
  echo "a é maior que b";
?>

Friday, October 4, 13
ESTRUTURAS DE CONTROLE
IF/ELSE
Para executar mais de um comando dentro da condicional
utilizamos bloco de comandos com {}
Exemplo
<?php
if ($a > $b) {
  echo "a é maior b";
  $b = $a;
}
?>

Friday, October 4, 13
ESTRUTURAS DE CONTROLE
IF/ELSE
Geralmente temos a necessidade de executar um trecho de código
caso e expressão seja verdadeira e outro caso ela seja falsa, para
isso utilizamos o else junto com o operador if.
Exemplo
<?php
if ($a > $b) {
  echo "a é maior b";
  $b = $a;
} else {
echo "a não é maior b";
}
?>

Friday, October 4, 13
ESTRUTURAS DE CONTROLE
IF/ELSE
Outra necessidade comum é fazer várias comparações em
sequência, para tal utilizamos o elseif ou else if
Exemplo
<?php
if ($a > $b) {
    echo "a é maior que b";
} elseif ($a == $b) {
    echo "a é igual a b";
} else {
    echo "a é menor que b";
}
?>

Pode-se encadeiar vários elseif
Friday, October 4, 13
ESTRUTURAS DE CONTROLE
SWITCH

O switch funciona de forma similar a uma série de if/elseif
encadeiados. Útil para comparar vários valores sobre uma mesma
expressão.

Friday, October 4, 13
ESTRUTURAS DE CONTROLE
SWITCH
Exemplo
<?php
if ($i == 0) {
    echo "i é igual a 0";
} elseif ($i == 1) {
    echo "i é igual a 1";
} elseif ($i == 2) {
    echo "i é igual a 2";
}
switch ($i) {
    case 0:
        echo "i igual 0";
        break;
    case 1:
        echo "i igual 1";
        break;
    case 2:
        echo "i igual 2";
        break;
}
?>
Friday, October 4, 13
ESTRUTURAS DE CONTROLE
FOR
FOR é utilizado para criar laços de repetição. Que permite que
você execute um determinado trecho de código por repetidas
vezes.
Estrutura básica do for
for (expressao; expressao2; expressao3)
codigo a ser executado

Friday, October 4, 13
ESTRUTURAS DE CONTROLE
FOR
for (expressao; expressao2; expressao3)
codigo a ser executado

A primeira expressão é executada no começo do laço
A segunda expressão é avaliada a cada iteração. Se o resultado for
true o laço continua caso contrário é interrompido.
A terceira expressão é executada no fim de iteração
Friday, October 4, 13
ESTRUTURAS DE CONTROLE
FOR
Exemplos
<?php
/* exemplo 1 */
for ($i = 1; $i <= 10; $i++) {
    echo $i;
}
/* exemplo 2 */
for ($i = 1; ; $i++) {
    if ($i > 10) {
        break;
    }
    echo $i;
}
/* exemplo 3 */
$i = 1;
for (; ; ) {
    if ($i > 10) {
        break;
    }
    echo $i;
    $i++;
}
/* exemplo 4 */
for($i = 1, $j = 0; $i <= 10; $j += $i, print $i, $i++);
?>
Friday, October 4, 13
ESTRUTURAS DE CONTROLE
WHILE
O while é o tipo de laço mais simples do PHP. Sua estrutura
básica é:
while (expressao)
codigo a ser executado

Enquanto a expressão for verdadeira o código do laço será
executado.
<?php
$i = 1;
while ($i <= 10) {
    echo $i++;
}
?>
Friday, October 4, 13
ESTRUTURAS DE CONTROLE
WHILE
Uma variação do while é o laço do-while, a única diferença para
o while é que a expressão é testada no final de cada iteração ao
invés de ser no comeco como é no while

<?php
$i = 0;
do {
    echo $i;
} while ($i > 0);
?>

Friday, October 4, 13
ESTRUTURAS DE CONTROLE
FOREACH
O foreach é uma solução poderosa para iterar sobre arrays ou
objetos. Funciona apenas com esses tipos de dados.
Sintaxe básica do foreach
foreach (array as $valor)
codigo
foreach (array as $chave => $valor)
codigo

Na primeira forma a cada iteração o valor atual do array é
atribuido a variável valor.
Na segunda forma acontece a mesma coisa, apenas atribuindo a
chave atual na variável $chave
Friday, October 4, 13
ESTRUTURAS DE CONTROLE
FOREACH
<?php
/* exemplo 1: imprime apenas valores */
$a = array(1, 2, 3, 17);
foreach ($a as $v) {
    echo "O valor atual de $v: $v.n";
}
/* exemplo 2: imprime o valor e a posição do array */
$a = array(1, 2, 3, 17);
$i = 0; /* apenas para fins educativos */
foreach ($a as $v) {
    echo "$a[$i] => $v.n";
    $i++;
}
/* exemplo 3: imprime chave e valor */
$a = array(
    "um" => 1,
    "dois" => 2,
    "tres" => 3,
    "desessete" => 17
);
foreach ($a as $k => $v) {
    echo "$a[$k] => $v.n";
}
?>
Friday, October 4, 13
EXERCÍCIOS
Faça um script PHP que pegue o mês atual e verifique se é
setembro if-else e imprima a seguinte mensagem:
Dica: a função date(‘F’) retorna o mês (provavelmente em inglês)
Estamos em setembro!!!
Não estamos em setembro =(

Altere o valor do mês para qualquer outro valor e teste se cai na
condicional else.
Friday, October 4, 13
EXERCÍCIOS
Escreva um script PHP que através de um laço imprima as
seguintes mensagens
abc abc abc abc abc abc abc abc abc
xyz xyz xyz xyz xyz xyz xyz xyz xyz
123456789
1.
2.
3.
4.
5.
6.

Item
Item
Item
Item
Item
Item

A
B
C
D
E
F

Utilize while no primeiro laço, do-while no segundo e for nos dois
últimos. Sem utilizar arrays neste exercício.
Friday, October 4, 13
EXERCÍCIOS
Utilize um laço for para imprimir uma lista de números ao
quadrado de 1 a 12

1 * 1 =
2 * 2 =
3 * 3 =
...
12 * 12

1
4
9
= 144

Utilize as variáveis do laço para imprimir os números.
Friday, October 4, 13
EXERCÍCIOS
Utilize dois laços for para imprimir uma tabela de multiplicação
como esta:

Dica utilize um for para as linhas e outro para as colunas.
Friday, October 4, 13
FUNÇÕES
Uma função é um pedaço de código que realiza alguma tarefa
específica, podendo ser chamada quantas vezes for necessária.
Uma função é definida com a palavra reservada function uma
declaração de função segue essa estrutura:
<?php
function teste ($arg_1, $arg_2, /* ..., */ $arg_n)
{
    echo "Exemplo de função.n";
    return $valor_retornado;
}
?>

O nome de função segue a mesma regra de nomes de variáveis.
Pode ter N argumentos.
Não é obrigatório retornar nada (return)
Friday, October 4, 13
FUNÇÕES
<?php
//Define a função teste sem argumentos
function teste ()
{
    echo "Olá mundo.";
}
//Executa a função
teste(); //Irá imprimir Olá mundo.
//Define uma função com argumento
function teste ($complemento)
{
    echo "Olá " . $complemento;
}
//Executa a função
teste("mundo"); //Irá imprimir Olá mundo
//Executa a função
teste("batata"); //Irá imprimir Olá batata
?>
Friday, October 4, 13
FUNÇÕES
Para retornar valores é utilizado a palavra return.
<?php
function quadrado ($num)
{
    return $num * $num;
}
echo quadrado (4);   // imprime '16'.
?>

A palavra return não imprime resultados na tela, apenas retorna o
valor para quem chamou a função.

Friday, October 4, 13
EXERCÍCIOS
Escreva e chame uma função que imprima a frase

ola mundo!

Escreva uma nova função que aceite um parametro e exiba na
saudação.
ola batata!

Friday, October 4, 13
EXERCÍCIOS
Escreva e chame uma função receba dois argumentos, realize um
calculo e devolva a área de um retângulo com a seguinte frase.
Para um retângulo de altura $h e largura $l a área é $area

Friday, October 4, 13
EXERCÍCIOS
Faça uma função que receba um argumento diga se o número
informado é par
O número X é par
O número X não é par

Friday, October 4, 13
EXERCÍCIOS
Faça uma função que receba um argumento e calcule seu fatorial.
Dica: pode-se utilizar laço for

Escreva uma nova função que calcule o fatorial de um número
utilizando recursividade.

Friday, October 4, 13
ORIENTAÇÃO A OBJETOS
O suporte a orientação foi adicionado ao PHP na versão 4.
Toda a parte de orientação a objetos foi reescrita na versão 5.
Orientação a objetos nada mais é do que passar para uma
linguagem de computador a compreensão que já temos do mundo
real.

Friday, October 4, 13
ORIENTAÇÃO A OBJETOS
Todo objeto do mundo real que queremos representar será
transformado numa classe e seus atributos serão propriedades e
métodos.
Exemplo vamos supor que queremos representar uma árvore,
iriamos definir a classe como arvore e seus atributos como
tamanho, quantidade de galhos, quantidade de folhas, se é frutifera
ou não seria convertidos em propriedades e métodos.

Friday, October 4, 13
ORIENTAÇÃO A OBJETOS
Para definir uma classe utilizamos a palavra class seguido do nome
da classe (lembrar da regras de nomes do PHP)
Definição básica de uma classe em PHP
<?php
class arvore {
    
}
?>

Dentro da classe podemos definir suas propriedades e métodos,
basicamente as propriedades são variaveis dentro da classe e os
métodos funções criadas dentro da classe.
Friday, October 4, 13
ORIENTAÇÃO A OBJETOS
Exemplificando vamos criar uma classe olaMundo com um método
ola()
<?php
//define uma classe
class olaMundo
{
//define um método
    function ola()
{
echo "Olá mundo.";
}
}
//instancia classe A e chama método
$instancia_a = new A();
$instancia_a->ola();
?>

Friday, October 4, 13
ORIENTAÇÃO A OBJETOS
Ao se criar uma classe uma pseudo variável $this fica disponível
para chamar propriedades e métodos dentro do contexto da
classe.
<?php
//define uma classe
class olaMundo
{
//define um método
    function ola()
{
echo "Olá ";
$this->mundo(); //executa o metodo mundo()
}
//define um método
    function mundo()
{
echo "mundo.";
}
}
//instancia classe A e chama método
$instancia_a = new olaMundo();
$instancia_a->ola();
?>
Friday, October 4, 13
ORIENTAÇÃO A OBJETOS
VISIBILIDADE
Ao se definir uma classe nem sempre queremos deixar os métodos
e propriedades visíveis para serem acessados livremente.
Para isso podemos definir “níveis” de visibilidade para as
propriedades e métodos, são eles:
public: Não impõem nenhum restrição de acesso
protected: Métodos e propriedades apenas acessíveis dentro da
classe ou classes que a herdem
private: Métodos e propriedades acessíveis apenas dentro da
classe.
Friday, October 4, 13
ORIENTAÇÃO A OBJETOS
VISIBILIDADE
<?php
/**
 * Define MinhaClasse
 */
class MinhaClasse
{
    public $publica = 'Publica';
    protected $protegida = 'Protegida';
    private $privada = 'Privada';
    public function imprimeAlo()
    {
        echo $this->publica;
        echo $this->protegida;
        echo $this->privada;
    }
}
$obj = new MinhaClasse();
echo $obj->publica; // Funciona
echo $obj->protegida; // Erro Fatal
echo $obj->privada; // Erro Fatal
$obj->imprimeAlo(); //Mostra Public, Protected e Private

Friday, October 4, 13
ORIENTAÇÃO A OBJETOS

CONSTRUTORES/DESTRUTORES
O PHP tem dois métodos mágicos para as classes um é o
__contruct() e o outro é o __destruct()
Esses métodos são chamados automáticamente em momentos
distintos, como o nome sugere o __construct() é chamado quando
a instância é criada e o __destruct() quando a instância é destruída.

Friday, October 4, 13
EXERCÍCIOS
Crie uma classe chamada olaMundo e um método digaOi() que
imprima a mensagem “olá mundo”.
Crie um método na classe olaMundo que receba um parâmetro e
exiba na tela uma saudação como “olá Fulano”.
Cria uma classe que exiba a mensagem “olá mundo” na inicialização
da instância.

Friday, October 4, 13
EXERCÍCIOS
Refaça o exercício para calcular a área de um retângulo separando
o método que faz o cálculo do que exibe a mensagem.
Faça uma classe que cálcule o fatorial de um número. Receba o
número no construtor e verifique se ele é válido. Crie um método
chamado resultado para retornar a resposta.
Crie uma classe chamada Calculadora que receba dois parametros
no construtor. Implemente quatro métodos Adicao(), Subtracao(),
Multiplicacao() e Divisao() que retorne os resultados
correspondentes
Friday, October 4, 13
ORIENTAÇÃO A OBJETOS
HERANÇA
A herança funciona de forma que os métodos e propriedades
definidos numa classe ‘pai’ possa ser acessada (herdada) para uma
classe ‘filha’.
No PHP para declarar que uma classe herda as propriedades de
outras usamos a palavra extends.
Por exemplo vamos analizar uma moto e um carro. Ambos tem
características em comum como rodas, marcha, velocidade, etc.
Podemos criar uma classe genérica chamada Veiculo com os
atributos de ambos.
Friday, October 4, 13
ORIENTAÇÃO A OBJETOS
HERANÇA
<?php
class Veiculo
{
public $marcha;
public $quantidadeRodas;
public function passarMarcha()
{
// código
}
public function andar()
{
// código
}
}
class Carro extends Veiculo
{
public function __construct()
{
$this->quantidadeRodas = 4;
}
}
$carro = new Carro();
$carro->andar();
?>

Friday, October 4, 13
ORIENTAÇÃO A OBJETOS
CLASSES ABSTRATAS
No PHP5 foi introduzido métodos e classes abstratas.
De forma bem resumida uma classe e métodos abstratos servem
como modelo para uma classe concreta.
Quando uma classe herda uma classe abstrata todos os métodos
marcados como abstratos devem ser implementados na classe
‘filha’.
Outra coisa importânte é que as assinaturas dos métodos devem
coincidir, ou seja, ter os mesmos números de argumentos e tipos.

Friday, October 4, 13
ORIENTAÇÃO A OBJETOS
CLASSES ABSTRATAS
<?php
abstract class ClasseAbstrata
{
// Força a classe que estende ClasseAbstrata a definir esse método
    abstract protected function pegarValor();
    
    // Método comum
    public function imprimir() {
        print $this->pegarValor();
    }
}
class ClasseConcreta1 extends ClasseAbstrata
{
// obrigado definir esse método
    protected function pegarValor() {
        return "ClasseConcreta1";
    }
}
?>

Friday, October 4, 13
EXERCÍCIOS

Refaça novamente a classe Calculadora criando uma classe abstrata
com todos os métodos abstratos para realização dos cálculos,
implemente numa classe filha.

Friday, October 4, 13
EXERCÍCIOS

Crie uma classe Equipamento com o atributo ligado (tipo boolean)
e com os métodos liga e desliga. O método liga torna o atributo
ligado true e o método desliga torna o atributo ligado false

Friday, October 4, 13
EXERCÍCIOS
Uma sub-classe EquipamentoSonoro que herda as características
de Equipamento e que possui os atributos volume que varia de 0
a 10 e stereo (do tipo boolean). A classe ainda deve possuir
métodos para ler e alterar o volume (getter e setter), além
dos métodos mono e stereo. O método mono torna o atributo
stereo falso e o método stereo torna o atributo stereo verdadeiro.
Ao ligar o EquipamentoSonoro através do método liga, seu volume
é automaticamente ajustado para 5

Friday, October 4, 13
EXERCÍCIOS

Faça um script PHP que instancia 2 objetos da classe Equipamento
e 2 objetos da classe EquipamentoSonoro. O script ainda deve
inserir esses objetos em um array e, depois, listar todos os
elementos do array.

Friday, October 4, 13
INCLUDE / REQUIRE
O PHP fornece alguns comandos para inclusão de arquivos do tipo
php em sua aplicação são eles
include, require, include_once, require_once
Todos fazem a mesma coisa, incluem um arquivo PHP no seu script
include emite um “warning” caso o arquivo não seja encontrado.
requere emite um “error” caso o arquivo não seja encontrado.

Friday, October 4, 13
FUNCIONALIDADES WEB
SUPERGLOBAIS
O PHP existem algumas variáveis pré definidas chamadas de
superglobais. São acessíveis em todo escopo do script. As
principais delas são
$GLOBALS: Um array associativo contendo todas as variáveis no
escopo global do arquivo.
$_SERVER: Um array contendo informações sobre o servidor. As
entradas neste array são criadas pelo servidor web.

Friday, October 4, 13
FUNCIONALIDADES WEB
SUPERGLOBAIS
$_GET: Um array associativo de variáveis passadas para o script
atual através do método HTTP GET.
$_POST: Um array associativo de variáveis passadas para o script
atual através do método HTTP POST.
$_FILES: Um array associativo de arquivos enviados para o script
atual com o método HTTP POST.

Friday, October 4, 13
FUNCIONALIDADES WEB
SUPERGLOBAIS
$_COOKIE: Um array associativo com os cookies setados em sua
aplicação.
$_SESSION: Um array associativo com as variáveis de sessão em
sua aplicação
$_REQUEST: Um array associativo com os dados de $_GET,
$_POST e $_COOKIE
$_ENV: Um array associativo com as variáveis de ambiente.

Friday, October 4, 13
SESSÕES
As sessões permitem os dados pré determinados estejam
disponíveis em acessos subsequentes.
Para iniciar uma sessão usamos o comando session_start()
Para registrar uma variável na sessão usamos a superglobal
$_SESSION
Para destruir uma sessão usamos o session_destroy()

Friday, October 4, 13
SESSÕES
<?php
// pagina1.php
session_start();
echo 'Bem vindo a pagina #1';
$_SESSION['favcolor'] = 'verde';
$_SESSION['animal']   = 'gato';
$_SESSION['time']     = time();
echo '<br /><a href="pagina2.php">pagina 2</a>';
?>

Friday, October 4, 13
SESSÕES
<?php
// pagina2.php
session_start();
echo 'Bem vindo a pagina #2<br />';
echo $_SESSION['favcolor']; // verde
echo $_SESSION['animal'];   // gato
echo date('Y m d H:i:s', $_SESSION['time']);
echo '<br /><a href="pagina1.php">pagina 1</a>';
?>

Friday, October 4, 13
EXERCÍCIO
Crie um script que inicie uma sessão e que exiba as seguintes
informação
ID da sessão;
Data de criação da sessão;
Data de último acesso;
Número de visitas anteriores;
Dica: id da sessão session_id()
Dica: data de criação time() ou date(‘d/m/Y’)
Dica: utilize isset()
Friday, October 4, 13
REQUISIÇÃO GET
A superglobal $_GET contém todas as variáveis passas por uma
requisição HTTP GET

<?php
echo 'Olá ' . $_GET["nome"];
// ou print_r para imprimir todas as chaves e valores
print_r($_GET);
?>

Friday, October 4, 13
REQUISIÇÃO POST
A superglobal $_POST contém todas as variáveis passas por uma
requisição HTTP POST

<?php
echo 'Olá ' . $_POST["nome"];
// ou print_r para imprimir todas as chaves e valores
print_r($_POST);
?>

Friday, October 4, 13
COOKIES
Cookies permiter salvar dados no navegador do usuário permitindo
o acompanhamento ou identificação dos usuário quando retornam
a página, para setar um cookie utilizamos a função setcookie()
bool setcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain
[,bool $secure = false [, bool $httponly = false ]]]]]] )

O cookie deve ser setado antes de ter qualquer saida para tela

Friday, October 4, 13
COOKIES
<?php
$value = 'alguma coisa de algum lugar';
setcookie("CookieTeste", $value);
/* expira em 1 hora */
setcookie("CookieTeste", $value, time()+3600);  
/* Imprimindo valor do cookie */
// Mostra um cookie individual
echo $_COOKIE["CookieTeste"];
/* Outra maneira de depurar(debug)/testar é vendo todos os cookies */
print_r($_COOKIE);
?>

Friday, October 4, 13
EXERCÍCIO
Crie um script PHP (funcionario.php) contendo uma classe
Funcionario com atributos privados nome e salario. A classe deverá
ter um construtor que receba os atributos como parâmetros.
Além disso, deve ter métodos para obter e alterar os atributos
nome e salário (getNome, setNome, getSalario, setSalario).
O salário jamais poderá ser negativo. Crie também um método
__toString() para retornar uma string contendo todos os atributos.

Friday, October 4, 13
EXERCÍCIO
Crie um script PHP (processa.php) que recebe dados (nome e
salário) de um formulário (formulario.php), instancia um objeto
Funcionario (funcionario.php), preenche o objeto com os
dados vindos do formulário e, depois, exibe esse objeto em um
outro script (mostra.php).

Friday, October 4, 13
BANCO DE DADOS

O PHP suporta diversos banco de dados. Neste curso será
abordado como trabalhar com o banco de dados MySQL
Para se conectar com o bando de dados podemos utilizar a
extensão mysqli ou PDO_MySQL.

Friday, October 4, 13
BANCO DE DADOS
Estrutura do mysqli
mysqli(endereco, usuario, senha, banco_de_dado, porta)

endereco: Nome ou IP onde está localizado o servidor MySQL;
usuario: Usuário para se conectar ao servidor MySQL;
senha: Senha para se conectar ao servidor MySQL;
banco_de_dados: Nome da base de dados que será utilizada;
porta: Porta do serviço MySQL
Friday, October 4, 13
BANCO DE DADOS
Exemplo de conexão com banco de dados:

<?php
//conecta com servidor e banco de dados
$mysqli = new mysqli("localhost", "usuario", "senha", "banco");
//verifica se houve algum erro ao conectar
if ($mysqli->connect_errno) {
    echo "Erro ao conectar com mysql: " . 
$mysqli->connect_error;
}
?>

Friday, October 4, 13
BANCO DE DADOS
Com a conexão pronta podemos realizar consultas no banco de
dados.
<?php
//conecta com servidor e banco de dados
$mysqli = new mysqli("localhost", "usuario", "senha", "banco");
//verifica se houve algum erro ao conectar
if ($mysqli->connect_errno) {
    echo "Erro ao conectar com mysql: " . 
$mysqli->connect_error;
}
$consulta = $mysqli->query("SELECT * FROM cidade");
while ($resultado = $consulta->fetch_assoc())
{
print_r($resultado);
}
?>
Friday, October 4, 13
EXERCÍCIO
Criar uma tabela no banco de dados;
Conectar com mysqli;
Inserir registro;
Consultar;
Apagar registro;
Atualizar um Registro
Friday, October 4, 13
STRINGS
Assim como os arrays as strings são muito utilizadas nas aplicações,
segue uma lista de funções básicas.
strlen devolve o tamanho da string.
<?php
$str = 'abcdef';
echo strlen($str); // 6
$str = ' ab cd ';
echo strlen($str); // 7
?>

Friday, October 4, 13
STRINGS
É possível cada caracter de uma string ou exibir um caracter
específico
<?php
$str = 'abcdef';
echo $str{2}; // c
echo $str{0}; // a
?>

Imprimir uma string com for

Friday, October 4, 13
STRINGS
Transformar toda uma string em letras minusculas

<?php
$str = 'ABC';
echo strtolower($str); // abc
?>

ou maiusculas

<?php
$str = 'abc';
echo strtoupper($str); // ABC
?>
Friday, October 4, 13
STRINGS
Para procurar um texto dentro de uma string podemos usar o
strpos(string, o_que_quero_procurar)

<?php
$string = 'abc';
$procurar   = 'a';
$pos = strpos($string, $procurar);
if ($pos === false) {
    echo "A string '$procurar' não foi encontrada em '$string'";
} else {
    echo "A string '$procurar' foi encontrada em '$string'";
    echo " na posição $pos";
}
?>

Friday, October 4, 13
STRINGS
strip_tags(string) remove todas as tags HTML de uma string

<?php
$texto = '<p>Teste de paragrafo.</p> <a href="#link">Ir</a>';
echo strip_tags($texto);

Friday, October 4, 13
STRINGS
str_replace(procurar, substituir, string) para substituir uma string
por outra

<?php
// Retorna: <body text='black'>
$body = str_replace("%body%", "black", "<body text='%body%'>");

// Retorna: Você deveria comer pizza, cerveja e sorvete todo dia
$f  = "Você deveria comer frutas, vegetais e fibras todo dia.";
$saudavel = array("frutas", "vegetais", "fibras");
$yummy   = array("pizza", "cerveja", "sorvete");
$body = str_replace($saudavel, $yummy, $f);
?

Friday, October 4, 13
STRINGS
explode(delimitador, string) para explodir uma string para um
array
<?php
$pizza  = "pedaco1|pedaco2|pedaco3|pedaco4|pedaco5|pedaco6";
$pedacos = explode("|", $pizza);
echo $pedacos[0]; // pedaco1
echo $pedacos[1]; // pedaco2
$data  = "20/02/1988”;
$dt_arr = explode("/", $p);
echo $dt_arr[0]; // 20
echo $dt_arr[1]; // 02
echo $dt_arr[2]; // 1988

Friday, October 4, 13
NAMESPACES
Em projetos muito grandes pode acontecer de ser definido duas
classes com o mesmo nome.
Para evitar esse tipo de problema usamos o namespace para
atribuir uma organização virtual a cada classe
Recomendado utilizar um namespace por arquivo

Friday, October 4, 13
NAMESPACES
Para definir um namespace utilizamos a palavra namespace
seguido de seu ‘caminho’ (o namespace funciona como se fosse
pastas)
<?php
// Foo.php
namespace CSFerramentas;
class OlaMundo
{
public function digaOi()
{
}
}
?>

Friday, October 4, 13
NAMESPACES
Para definir um namespace utilizamos a palavra namespace
seguido de seu ‘caminho’ (o namespace funciona como se fosse
pastas)
<?php
// Foo.php
namespace CSFerramentas;
class OlaMundo
{
public function digaOi()
{
}
}
?>

Friday, October 4, 13
NAMESPACES
E para instanciar a classe com namespace fazemos assim:
<?php
require 'Foo.php';
$ola = new CSFerramentasOlaMundo();
?>

OU
<?php
require 'Foo.php';
use CSFerramentasOlaMundo;
$ola = new OlaMundo();
?>

Friday, October 4, 13
PROJETO
Criar um Blog em PHP com uma tabela no banco de dados para
representar o título da postagem, conteúdo e autor.
Criar uma página para exibir todas as postagens
Criar uma página para cadastrar nova postagem
Criar uma página para editar a postagem

Friday, October 4, 13
KOHANA

O Kohana é um framework em PHP, open source (código aberto),
construído sobre o PHP5, orientado a objetos e com o padrão
MVC

Friday, October 4, 13
KOHANA
a

Friday, October 4, 13
KOHANA
O Model é responsável pela comunicação com banco de dados,
obtenção de dados, validação, etc.
A View é responsável pela exibição dos dados para o usuário final,
incluindo informações processadas, imagens, css, js.
A Controller cuida de toda a parte lógica da aplicação, processar
os dados obtidos da Model enviar para a View.

Friday, October 4, 13
PADRÃO DE CODIFICAÇÃO
Cada framework tem sua própria filosofia e melhores práticas de
codificação, mas no ano de 2009 foi criado um grupo de
desenvolvedores de vários frameworks para definir boas práticas
de programação para a linguagem.
Não é um grupo oficial do PHP, mas é formado por representantes
de vários frameworks atuais, o nome do grupo é PHP-FIG, sendo
FIG um acrônimo para (Framework Interoperability Group).

Friday, October 4, 13
PADRÃO DE CODIFICAÇÃO
Até o momento foram criadas quatro PSR, que são as melhores
práticas para o desenvolvimento utilizando PHP, sendo elas:
PSR-0: Focado em manter uma convenção de arquivo, classe e
namespace para o carregamento automático do código
(autoloading) (https://github.com/php-fig/fig-standards/blob/master/
accepted/PSR-0.md)
PSR-1: Focado em definir os elementos padrões de codificação que
são necessários para assegurar um elevado nível de
interoperabilidade técnica entre o código PHP compartilhado.
(https://github.com/php-fig/fig-standards/blob/master/accepted/
PSR-1-basic-coding-standard.md)
Friday, October 4, 13
PADRÃO DE CODIFICAÇÃO
PSR-2: Focado no padrão de codificação utilizando PHP para
padronização do código (https://github.com/php-fig/fig-standards/
blob/master/accepted/PSR-1-basic-coding-standard.md)
PSR-3: Define uma interface padrão para uma interface de log
(https://github.com/php-fig/fig-standards/blob/master/accepted/
PSR-3-logger-interface.md)

Friday, October 4, 13
PADRÃO DE CODIFICAÇÃO
Atualmente o Kohana não faz parte do grupo PHP-FIG, mas possui
uma documentação bem detalhada do seu padrão de codificação e
segue alguns padrões do PSR.
Nomes de classes e locais de arquivos
As classes no Kohana devem tem a primeira letra maiuscula e
utilizar underscore(_) para separar as palavras.
Todas as classes devem ficar na pasta classes.

Friday, October 4, 13
PADRÃO DE CODIFICAÇÃO
Nome da classe

localização

Controller_Template

classes/Controller/Template.php

Model_User

classes/Model/User.php

Model_BlogPost

classes/Model/BlogPost.php

Database

classes/Database.php

Database_Query

classes/Database/Query.php

Form

classes/Database/Query.php

Friday, October 4, 13
PADRÃO DE CODIFICAÇÃO
Uso de chaves em estruturas de controle
As chaves devem ser colocados em suas próprias linhas, indentado
com o comando da estrutura de controle.
// Forma correta
if ($a === $b)
{
...
}
else
{
...
}
// forma errada
if ($a === $b) {
...
} else {
...
}
Friday, October 4, 13
PADRÃO DE CODIFICAÇÃO
Uso de chaves em classes
A excessão da regra de como devem ficar as chaves é na
declaração da classe onde a chave começa ao lado do nome da
classe e não em sua própria linha.
// Correto
class Abacate {
// Incorreto
class Abacate
{

Friday, October 4, 13
PADRÃO DE CODIFICAÇÃO
Chaves vazias
Em caso de utilizar chaves vazias não coloque nenhum caracter
entre eles (espaco ou nova linha)

// Correto
class Abacate {}
// Incorreto
class Abacate { }

Friday, October 4, 13
PADRÃO DE CODIFICAÇÃO
Arrays
Os arrays podem ser definidos tanto em uma linha como em
multiplas linhas.

array('a' => 'b', 'c' => 'd');
array(
'a' => 'b',
'c' => 'd',
);

Friday, October 4, 13
PADRÃO DE CODIFICAÇÃO
Abrindo parenteses
A abertura de parenteses vai na mesma linha, sendo fechado no
mesmo nível da declaração.
// Correto
array(
...
)
// Incorreto:
array
(
...
)

Friday, October 4, 13
PADRÃO DE CODIFICAÇÃO
Convenção de nomes de classes
O Kohana utiliza underscore (_) no nome das classes e não o
camelCase.
// Controller class, uses Controller_ prefix
class Controller_Apple extends Controller {
// Model class, uses Model_ prefix
class Model_Cheese extends Model {
// Regular class
class Peanut {

Friday, October 4, 13
PADRÃO DE CODIFICAÇÃO
Quando for instanciar uma nova classe não utilize parenteses se
não for passado nenhum parametro para o construtor da classe.

// Correto:
$db = new Database;
// Incorreto:
$db = new Database();

Friday, October 4, 13
PADRÃO DE CODIFICAÇÃO
Funções e métodos
Devem ser todas em letras minusculas e utilizar underscore para
separar as palavras.

function drink_beverage($beverage)
{

Friday, October 4, 13
PADRÃO DE CODIFICAÇÃO
Variáveis
Mesmo padrão de métodos, deve-se utilizar letras minusculas e
underscore.
// Correto:
$foo = 'bar';
$long_example = 'uses underscores';
// Incorreto:
$weDontWantThis = 'understood?';

Friday, October 4, 13
PADRÃO DE CODIFICAÇÃO

Indentação
A indentação deve utilizar tabs e nunca espaços

Friday, October 4, 13
PADRÃO DE CODIFICAÇÃO
Concatenação de string
Não utiliza espaços entre o operador de concatenação
// Correto:
$str = 'one'.$var.'two';
// Incorreto:
$str = 'one'. $var .'two';
$str = 'one' . $var . 'two';

Friday, October 4, 13
PADRÃO DE CODIFICAÇÃO
Operadores de comparação
Utilizar OR e AND para comparação

// Correto:
if (($foo AND $bar) OR ($b AND $c))
// Incorreto:
if (($foo && $bar) || ($b && $c))

Friday, October 4, 13
PADRÃO DE CODIFICAÇÃO
Utilizar elseif ou invés de else if

// Correto:
elseif ($bar)
// Incorreto:
else if($bar)

Friday, October 4, 13
PADRÃO DE CODIFICAÇÃO
Constantes
Utilizar sempre caracteres maiusculos
// Correto:
define('MY_CONSTANT', 'my_value');
$a = TRUE;
$b = NULL;
// Incorreto:
define('MyConstant', 'my_value');
$a = True;
$b = null;

Friday, October 4, 13
PADRÃO DE CODIFICAÇÃO
Constantes
Utilizar sempre caracteres maiusculos
// Correto:
define('MY_CONSTANT', 'my_value');
$a = TRUE;
$b = NULL;
// Incorreto:
define('MyConstant', 'my_value');
$a = True;
$b = null;

Friday, October 4, 13
KOHANA
Instalação do Kohana:
Puxar framework no site;
Verificar se o ambiente esta ok (install.php)
Configurar o Kohana (bootstrap)
Mover arquivo de instalação
Hello World
Friday, October 4, 13
CONFIGURAÇÃO
A maior parte da configuração de ambiente do Kohana é feita no
arquivo bootstrap, localizado em application/bootstrap.php
As principais configurações que devem ser feitas são timezone e
locale e base_url

Friday, October 4, 13
CONFIGURAÇÃO
Também é possivel habilitar e desabilitar módulos
Kohana::modules(array(
// 'auth'
=> MODPATH.'auth',
// 'cache'
=> MODPATH.'cache',
// 'codebench' => MODPATH.'codebench',
// 'database'
=> MODPATH.'database',
// 'image'
=> MODPATH.'image',
// 'minion'
=> MODPATH.'minion',
// 'orm'
=> MODPATH.'orm',
// 'unittest'
=> MODPATH.'unittest',
// 'userguide' => MODPATH.'userguide',
));

Friday, October 4, 13

//
//
//
//
//
//
//
//
//

Basic authentication
Caching with multiple backends
Benchmarking tool
Database access
Image manipulation
CLI Tasks
Object Relationship Mapping
Unit testing
User guide and API documentation
FLUXO DA REQUISIÇÃO
O fluxo começa no arquivo index.php, nessa etapa são definidos os
caminhos da aplicação, dos modulos e do sistema (APPPATH,
MODPATH, SYSPATH)
Então entra em ação o bootstrap.php, carregando a classe Kohana,
então é chamado o método Kohana:init responsável por iniciar a
aplicação, configurar URL padrão (base_url), gerenciador de erros,
cache e log.
	

Friday, October 4, 13
FLUXO DA REQUISIÇÃO
	

 Nesta etapa também são carregados os módulos, o controle de
rotas e a classe de request.
	

 A classe Request (requisição) inicia, verifica se a rota existe,
redireciona para o controller apropriado e devolve a reposta
novamente para index, que exibe o resultado.

Friday, October 4, 13
ROTAS
O Kohana fornece um sistema de roteamento poderoso,
permitindo fazer uma ligação com qualquer fragmento de URL
com uma controller e action.
A rota padrão (default) do Kohana fica no arquivo bootstrap.php,
cada rota no sistema deve ter um nome unico.
Route::set('default', '(<controller>(/<action>(/<id>)))')
->defaults(array(
'controller' => 'Welcome',
'action'
=> 'index',
));

Friday, October 4, 13
ROTAS
Este trecho de código cria a rota default, ao utilizar o método
Route::set o primeiro parametro é o nome da rota, esse nome
deve ser unico no sistema, e o segundo paramento é qual o padrão
de URL que será casado neste exemplo é (<controller>(/
<action>(/<id>))).
Esse padrão vai pegar o valor passado no token <controller> e
procurar por um controller no sistema com o mesmo nome, e ,
fazer o mesmo com <action> e procurar nessa controller esse
método.
	

 Ainda é utilizado o defaults para setar um valor padrão para a
controller e para a action caso não seja passado na URL.
Friday, October 4, 13
ROTAS
Caso o valor da URL seja opcional ou não for presenta na rota,
pode-se utilizar o defaults para definir valores padrões.
No caso controller e action devem sempre possuir um valor
padrão.
	

O Kohana também converte automaticamente o nome do
controller para o padrão de nomes, por exemplo:
/blog/ver/11 irá procurar pela controller Controller_Blog.php na
pasta classes/Controller/Blog.php e executar a ação action_ver()
Friday, October 4, 13
SESSÕES
O Kohana também fornece uma classe para facilitar o uso de
sessões.
Para acessar a instância da sessão pode ser utilizado o método
Session::instance.
// Pega a instancia da classe Session
$session = Session::instance();

Friday, October 4, 13
SESSÕES
Todos os dados da sessão podem ser obtidos como array com o
método Session::as_array.

// pega todos os dados da sessao como array
$data = $session->as_array();

Friday, October 4, 13
SESSÕES
Para setar um novo valor da sessão pode ser usado o método set

// armazenar um novo valor
$session->set($chave, $valor);
// ou
Session::instance()->set($chave, $valor);
// Exemplo, armazenando id de um usuario
$session->set('user_id', 10);

Friday, October 4, 13
SESSÕES
Para pegar um valor já setado usamos o get

// Pegar um valor da sessao
$data = $session->get($chave, $valor_padrao);
// Pegar o id do usuario
$user = $session->get('user_id');

Friday, October 4, 13
SESSÕES
E, para deletar usamos o delete

// Deletar um valor da sessao
$session->delete($chave);
// Deletar o id do usuario (user_id)
$session->delete('user_id');

Friday, October 4, 13
BANCO DE DADOS
O suporte a banco de dados vem desabilitado no Kohana, para
habilita-lo é necessário ativar no módulo de database e orm no
arquivo bootstrap.php.
	

 Após habilitar o módulo de bando de dados e ORM é
necessário criar um arquivo de configuração com os dados de
acesso ao banco de dados.
	

 Um modelo do arquivo pode ser encontrado na pasta modules/
database/config/database.php. Não altere esse arquivo, copie ele
para a pasta application/config e então configure seu banco de
dados.
Friday, October 4, 13
BANCO DE DADOS
Com o acesso do Kohana ao banco de dados configurado já é
possivel fazer as classes da Model (responsável pelas operações
com o banco de dados).
Para criação dos Models o Kohana estabelece algumas regras:
O nome da tabela deve ter o mesmo nome do Model só que no
plural. Ex. Model_Blog a tabela deverá ser blogs para Model_Post a
tabela devera ser posts.

Friday, October 4, 13
BANCO DE DADOS
O plural das palavras são em inglês, caso você tenha alguma dúvida
com o nome escolhido para a tabela pode usar o comando abaixo
para verificar qual será o plural ou singular correspondente:

echo Inflector::plural('person'); //imprime people
echo Inflector::singular('people'); //imprime person

Friday, October 4, 13
MODEL
Umas das vantagens do Kohana é o poder do ORM que permite
operações de crud de uma maneira simples, bastando herdar
(extends) a classe ORM para sua classe Model, como no exemplo:

class Model_Member extends ORM
{
...
}

Friday, October 4, 13
MODEL
Podemos carregar instancia da Model dessas formas
$user = ORM::factory('User');
// Ou
$user = new Model_User();

Friday, October 4, 13
MODEL
Para inserir um valor é bem simples, basta que sua Model herde a
classe ORM. Exemplo:
// pegando a instancia
$usuario = ORM::factory('User');
// definindo dados
$usuario->first_name = 'Fulano';
$usuario->last_name = 'de tal';
// salvando
$usuario->save();

Friday, October 4, 13
MODEL
Para procurar um objeto podemos utilizar o método ORM::find, ou
passa o ID do objeto diretamente para o construtor da classe
ORM.
// Procurar usuário com ID 20
$user = ORM::factory('User')
->where('id', '=', 20)
->find();
// Ou no construtor
$user = ORM::factory('User', 20);

Friday, October 4, 13
MODEL
Para recuperar todos os objetos da tabela usamos o ORM::find_all.

// Retorna todos os usuario no banco
$users = ORM::factory('User')->find_all();

Friday, October 4, 13
MODEL
Para atualizar ou deletar basta recuperar o objeto com uma busca,
e em seguida alterar o que for necessario e salva. Ou deletar o
objeto.
// Procurar usuário com ID 20
$user = ORM::factory('User')
->where('id', '=', 20)
->find();
// Atualiza objeto (altera informações e salva)
$user->first_name = "Ciclano";
$user->last_name = "de tal";
$user->save();
// Deletar
$user->delete();

Friday, October 4, 13
FIM DA PRIMEIRA PARTE

Friday, October 4, 13

Contenu connexe

Tendances

Tendances (20)

Aula3
Aula3Aula3
Aula3
 
Oficina de Web Design Lecom - PHP e JavaScript
Oficina de Web Design Lecom - PHP e JavaScriptOficina de Web Design Lecom - PHP e JavaScript
Oficina de Web Design Lecom - PHP e JavaScript
 
Introdução ao php
Introdução ao phpIntrodução ao php
Introdução ao php
 
Módulo de php
Módulo de phpMódulo de php
Módulo de php
 
Introdução a Linguagem de Programação PHP
Introdução a Linguagem de Programação PHPIntrodução a Linguagem de Programação PHP
Introdução a Linguagem de Programação PHP
 
SIMCIT 2013 - Mini-curso PHP
SIMCIT 2013 - Mini-curso PHPSIMCIT 2013 - Mini-curso PHP
SIMCIT 2013 - Mini-curso PHP
 
Minicurso Shell Script
Minicurso Shell ScriptMinicurso Shell Script
Minicurso Shell Script
 
Shell Script
Shell ScriptShell Script
Shell Script
 
Linguagem C - Funções
Linguagem C - FunçõesLinguagem C - Funções
Linguagem C - Funções
 
Introdução ao desenvolvimento com PHP
Introdução ao desenvolvimento com PHPIntrodução ao desenvolvimento com PHP
Introdução ao desenvolvimento com PHP
 
mod3-programação-estruturada
mod3-programação-estruturadamod3-programação-estruturada
mod3-programação-estruturada
 
5423 c ou c++
5423 c ou c++5423 c ou c++
5423 c ou c++
 
Funções em C
Funções em CFunções em C
Funções em C
 
C++ Funções
 C++ Funções C++ Funções
C++ Funções
 
Aula09 traducaosin110
Aula09 traducaosin110Aula09 traducaosin110
Aula09 traducaosin110
 
Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Curso Desenvolvimento WEB com PHP - PHP (parte 1)Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Curso Desenvolvimento WEB com PHP - PHP (parte 1)
 
PHP na Tela Escura: Aplicações Poderosas em Linha de Comando
PHP na Tela Escura: Aplicações Poderosas em Linha de ComandoPHP na Tela Escura: Aplicações Poderosas em Linha de Comando
PHP na Tela Escura: Aplicações Poderosas em Linha de Comando
 
PHP para aplicações Web de grande porte
PHP para aplicações Web  de grande portePHP para aplicações Web  de grande porte
PHP para aplicações Web de grande porte
 
Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem C
 
Oficina de shell script
Oficina de shell scriptOficina de shell script
Oficina de shell script
 

Similaire à Introdução PHP + Kohana 3

Similaire à Introdução PHP + Kohana 3 (20)

Linguagem PHP
Linguagem PHPLinguagem PHP
Linguagem PHP
 
PHP GERAL
PHP GERALPHP GERAL
PHP GERAL
 
Curso de PHP Básico ao Avançado
Curso de PHP Básico ao AvançadoCurso de PHP Básico ao Avançado
Curso de PHP Básico ao Avançado
 
Minicurso php
Minicurso phpMinicurso php
Minicurso php
 
Aprendendo PHP.pdf
Aprendendo PHP.pdfAprendendo PHP.pdf
Aprendendo PHP.pdf
 
Serversidephp pptx2-120418140114-phpapp01
Serversidephp pptx2-120418140114-phpapp01Serversidephp pptx2-120418140114-phpapp01
Serversidephp pptx2-120418140114-phpapp01
 
Minicurso PHP básico
Minicurso PHP básicoMinicurso PHP básico
Minicurso PHP básico
 
Aula4
Aula4Aula4
Aula4
 
2ª aula php
2ª aula php2ª aula php
2ª aula php
 
PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX
 
Linguagem PHP
Linguagem PHPLinguagem PHP
Linguagem PHP
 
Curso PHP UNIFACS 2014.1 – 1a Aula
Curso PHP UNIFACS 2014.1 – 1a AulaCurso PHP UNIFACS 2014.1 – 1a Aula
Curso PHP UNIFACS 2014.1 – 1a Aula
 
Guia php
Guia phpGuia php
Guia php
 
Php
PhpPhp
Php
 
Php women oficina iniciante de php
Php women   oficina iniciante de phpPhp women   oficina iniciante de php
Php women oficina iniciante de php
 
Mini Curso de PHP
Mini Curso de PHPMini Curso de PHP
Mini Curso de PHP
 
Php
PhpPhp
Php
 
Zephir
ZephirZephir
Zephir
 
Aula 01 - Curso PHP e MySQL
Aula 01 - Curso PHP e MySQLAula 01 - Curso PHP e MySQL
Aula 01 - Curso PHP e MySQL
 
Shell script
Shell scriptShell script
Shell script
 

Plus de Adir Kuhn

Componentes de Hardware
Componentes de HardwareComponentes de Hardware
Componentes de HardwareAdir Kuhn
 
Informatica basica
Informatica basicaInformatica basica
Informatica basicaAdir Kuhn
 
Sistemas Operacionais
Sistemas OperacionaisSistemas Operacionais
Sistemas OperacionaisAdir Kuhn
 
von newman e periféricos
von newman e periféricosvon newman e periféricos
von newman e periféricosAdir Kuhn
 
história da computação
história da computaçãohistória da computação
história da computaçãoAdir Kuhn
 

Plus de Adir Kuhn (6)

Internet
InternetInternet
Internet
 
Componentes de Hardware
Componentes de HardwareComponentes de Hardware
Componentes de Hardware
 
Informatica basica
Informatica basicaInformatica basica
Informatica basica
 
Sistemas Operacionais
Sistemas OperacionaisSistemas Operacionais
Sistemas Operacionais
 
von newman e periféricos
von newman e periféricosvon newman e periféricos
von newman e periféricos
 
história da computação
história da computaçãohistória da computação
história da computação
 

Introdução PHP + Kohana 3

  • 2. ADIR KUHN •Desenvolvedor •Certificado Zend (ZCE) •Certificado Scrum Master •Formado em PD •Evangelista PHP e Python Dúvidas @adirkuhn adirkuhn@gmail.com Friday, October 4, 13
  • 3. O QUE É PHP? • Umas das linguagens mais populares para criação de aplicações web • Open-source • Linguagem Interpretada (não é compilada) • Simples de aprender (baixa curva de aprendizado) • Fácil para dar um tiro no pé Friday, October 4, 13
  • 4. O QUE É PHP? fonte: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html Friday, October 4, 13
  • 5. BREVE HISTÓRICO •1995: Rasmus Lerdorf criou o PHP - criado para deixar dinâmico seu próprio site; - chamado inicialmente de Personal Home Page; •1997: Zeev Zuraski e Andi Gutmans - reescrita do parser do PHP v3 - projeto renomeado para PHP: Hypertext Preprocessor • 1998: Zeev Zuraski e Andi Gutmans - redesign do parser para o PHP v4 (Zend Engine) - fundada a Zend Technologies Friday, October 4, 13
  • 6. PHP O PHP foi construido para ser programado de forma estruturada. O suporte a Objetos foi adicionado na versão 4 O suporte a Objetos foi totalmente remodelado na v5 Friday, October 4, 13
  • 7. QUEM USA PHP PHP é uma das linguagens mais usadas no desenvolvimento web. Algumas empresas que utilizam: Yahoo! Flickr Wikipedia Digg Dailymotion Friday, October 4, 13
  • 8. COMEÇANDO Requisitos mínimos para começar a programar em PHP: Ter instalado o interpretador PHP; Um editor de textos; Ter preferencialmente instalado um servidor web LAMP, WAMP, etc Friday, October 4, 13
  • 9. POR ONDE COMEÇAR O site do PHP conta com uma documentação completa da linguagem. (www.php.net) Friday, October 4, 13
  • 10. PRIMEIRO SCRIPT Criar um documento com extensão PHP no servidor web. <?php echo ‘Ola Mundo.’; ?> Friday, October 4, 13
  • 11. O QUE ACONTECEU? Todos os comandos PHPs devem ficar dentro das tags <?php e ?> O interpretador do PHP analiza os comandos dentro das tags e executa. No caso o comando echo exibe uma mensagem na tela. Cusiosidade: tanto o echo quanto o print exibem uma mensagem na tela mas o echo é um construtor de linguagem e o print é uma função. Friday, October 4, 13
  • 12. SINTAXE BÁSICA O PHP é uma linguagem interpretada e irá executar tudo entre as tags <?php ?> <p>Isto vai ser ignorado.</p> <?php echo 'Enquanto isto vai ser interpretado.'; ?> <p>Isto também vai ser ignorado.</p> Todos os comando PHP devem terminar com ; (ponto e vírgula) Friday, October 4, 13
  • 13. EXERCÍCIO Criar um script em PHP que mostre a mensagem ‘Olá Mundo’. Friday, October 4, 13
  • 14. COMENTÁRIOS O PHP suporta vários tipos de comentários <?php echo 'Isto é um teste';//Comentário de uma linha em c++ /* Este é um comentário de múltiplas linhas        ainda outra linha de comentário */ echo 'Isto é ainda outro teste'; echo 'Um teste final';#Comentário estilo shell 1 linha ?> Friday, October 4, 13
  • 15. VARIÁVEIS Variáveis são formas de representar valores Para definir uma variável basta colocar um simbolo de cifrão ($) seguido de um nome. $idade = 25; Assim esta definido a variável $idade com o valor 25. Friday, October 4, 13
  • 16. VARIÁVEIS No PHP não é necessário setar o tipo da variável, ela é definida pelo interpretador na hora da execução. <?php $var = 'João'; //Tipo string $var = 1; //Tipo integer $var = false; //Tipo boolean ?> As variáveis devem obrigatóriamente começar com uma letra ou sublinhado (_) <?php $nome = 'João'; //Variável válida $2nome = ‘Maria’; //Inválida $_r = false; //Válida ?> Friday, October 4, 13
  • 17. TIPOS DE DADOS Agora que vimos um pouco sobre variáveis, vamos ver que tipos de dados o PHP suporta. O PHP possui oito tipos de dados: 4 básicos: integer, boolean, string, float 2 compostos: array, object 2 tipos especiais: resource, NULL Friday, October 4, 13
  • 18. BOOLEAN O tipo BOOLEAN é o mais simple do PHP representa somente os valores true / false (verdadeiro / falso) <?php $foo = True; // atribui o valor True para $foo $bar = False; // atribui o valor True para $foo ?> O PHP não diferencia maiusculas de minusculas ao atribuir os valores true ou false, sendo que True, TRUE, true são o mesmo valor se tratando de boleanos. Friday, October 4, 13
  • 19. INTEGER O tipo INTEGER representa números inteiros <?php $a = -10; $b = 45; ?> O tamanho máximo de um inteiro depende da plataforma. PHP não suporta inteiros sem sinal (UNSIGNED) O valor máximo de um inteiro pode ser obtido com a constante PHP_INT_MAX Friday, October 4, 13
  • 20. FLOAT O tipo FLOAT serve para armazenar números de ponto flutuante (doubles ou números reais) <?php $a = 1.98; $bar = 1002.25; ?> Para separar os valores é utilizado . ponto (separador decimal) Friday, October 4, 13
  • 21. STRING O tipo STRING é utilizado para representar um conjunto de caracteres. Não existe limite para esse tipo, a limitação é a quantidade de memória no servidor. <?php $a = “Minha String bonita”; $nome = “Meu nome é João”; ?> Friday, October 4, 13
  • 22. ARRAY Um dos tipos de dados mais poderoso do PHP. É um tipo de dado composto. Um array no PHP é um mapa ordenado que relaciona chaves para valores. Estrutura de um array array( chave => valor , ... ) // chave pode ser tanto string ou um integer // valor pode ser qualquer coisa Friday, October 4, 13
  • 23. ARRAY Para definir um array podemos usar o construtor array() <?php $arr = array("foo" => "bar", 12 => true); echo $arr["foo"]; // bar echo $arr[12];    // 1 ?> Friday, October 4, 13
  • 24. ARRAY Também é possivel criar arrays dentro de array <?php $arr = array("chave" => array(6 => 5, 13 => 9, "a" => 42)); echo $arr["chave"][6];    // 5 echo $arr["chave"][13];   // 9 echo $arr["chave"]["a"];  // 42 ?> Friday, October 4, 13
  • 25. ARRAY Se for omitido a chave quando você adiciona um novo item ao array, o maior indice inteiro é obtido e a nova chave será esse maior número + 1 <?php // Esse array é como ... array(5 => 43, 32, 56, "b" => 12); // ... este array array(5 => 43, 6 => 32, 7 => 56, "b" => 12); ?> Friday, October 4, 13
  • 26. OBJECT O tipo OBJECT é usado para representar instâncias de classes. É criado através da expressão new <?php $obj = new Classe(); ?> Mais detalhes serão vistos na aula de orientação a objetos. Friday, October 4, 13
  • 27. VARIÁVEIS E CONSTANTES Recapitulando, variáveis são usadas para armazenar os mais váriados tipo de dados, podendo ser inteiro, float, string, array, etc. Seu valor pode ser alterado a qualquer ponto no programa <?php $a = 1.98; //$a é um float $a = “pato”; //$a agora é uma string ?> Friday, October 4, 13
  • 28. VARIÁVEIS E CONSTANTES Também temos as CONSTANTES. Elas funcionam como variáveis, podendo armazenar qualquer tipo de dado, a única diferença é que os valores das CONTANTES são IMUTÁVEIS, ou seja, não muda no decorrer da aplicação <?php // Nomes de constantes válidos define("FOO",     "alguma coisa"); define("FOO2",    "alguma outra coisa"); define("FOO_BAR", "alguma coisa mais"); // Nomes de constantes inválidas define("2FOO",    "alguma coisa"); // Isto é válido, mas deve ser evitado: // O PHP pode vir a fornercer uma constante mágica // que danificará seu script define("__FOO__", "alguma coisa"); ?> Friday, October 4, 13
  • 29. EXERCÍCIO Criar um novo arquivo para exibir a mensagem “Ola Mundo” mas utilizando uma váriavel e outra utilizando uma constante Friday, October 4, 13
  • 30. OPERADORES ARITMÉTICOS Assim como todas as linguagens de programação o PHP também possui operadores aritméticos. Exemplo Resultado -$a Negação Oposto de $a $a + $b Adição Soma de $a e $b $a - $b Subtração Diferença entre $a e $b $a * $b Multiplicação Produto de $a e $b $a / $b Divisão Quociente de $a e $b $a % $b Friday, October 4, 13 Nome Módulo Resto de $a dividido por $b
  • 31. OPERADORES DE ATRIBUIÇÃO O operador básico de atribuição é o “=”. Não significa igual, mas que que o operador da esquerda recebe o valor da expressão da direita <?php $a = ($b = 4) + 5; /* $a configurado para 9 e $b configurado como 4.*/ ?> Friday, October 4, 13
  • 32. OPERADORES DE ATRIBUIÇÃO O operador básico de atribuição é o “=”. Não significa igual, mas que que o operador da esquerda recebe o valor da expressão da direita <?php $a = ($b = 4) + 5; /* $a configurado para 9 e $b configurado como 4.*/ ?> Friday, October 4, 13
  • 33. OPERADORES DE COMPARAÇÃO Permite a comparação de dois valores o resultado sera verdadeiro ou falso Exemplo Resultado $a == $b Igual Verdadeiro (TRUE) se $a for igual a $b $a === $b Idêntico Verdadeiro (TRUE) se $a for igual a $b e forem do mesmo tipo $a != $b Diferente Verdadeiro (TRUE) se $a for diferente de $b $a <> $b Diferente Verdadeiro (TRUE) se $a for diferente de $b $a !== $b Não idêntico Verdadeiro se $a não for igual e $b ou não forem do mesmo tipo $a < $b Menor que Verdadeiro se $a for menor que $b $a > $b Maior que Verdadeiro se $a for maior que $b $a <= $b Menor ou igual Verdadeiro se $a for menor ou igual a $b $a >= $b Friday, October 4, 13 Nome Maior ou igual Verdadeiro se $a for maior ou igual a $b
  • 34. OPERADORES DE INCREMENTO O PHP suporta operadores de pré e pós-incremento no estilo C/C++ Exemplo Efeito ++$a Pré-incremento Incrementa $a em 1 e retorna $a $a++ Pós-incremento Retorna $a e então incrementa $a em 1 --$a Pré-decremento Decrementa $a em 1 e então retorna $a $a-- Friday, October 4, 13 Nome Pós-decremento Retorna $a e então decrementa $a em 1
  • 35. OPERADORES DE INCREMENTO/DECREMENTO Exemplos <?php echo "<h3>Pós incremento</h3>"; $a = 5; echo "Deve ser 5: " . $a++ . "<br />n"; echo "Deve ser 6: " . $a . "<br />n"; echo "<h3>Pré incremento</h3>"; $a = 5; echo "Deve ser 6: " . ++$a . "<br />n"; echo "Deve ser 6: " . $a . "<br />n"; echo "<h3>Pós decremento</h3>"; $a = 5; echo "Deve ser 5: " . $a-- . "<br />n"; echo "Deve ser 4: " . $a . "<br />n"; echo "<h3>Pré decremento</h3>"; $a = 5; echo "Deve ser 4: " . --$a . "<br />n"; echo "Deve ser 4: " . $a . "<br />n"; ?> Friday, October 4, 13
  • 36. OPERADORES LÓGICOS Permite a comparação de dois valores boleanos, obtendo como resposta verdadeiro ou falso Exemplo Resultado $a and $b E Verdadeiro (TRUE) se $a e $b forem verdadeiros. $a && $b E Verdadeiro (TRUE) se $a e $b forem verdadeiros. $a or $b OU Verdadeiro se $a ou $b forem verdadeiros. $a || $b OU Verdadeiro se $a ou $b forem verdadeiros. ! $a NÃO Verdadeiro se $a for falso $a xor $b Friday, October 4, 13 Nome XOR Verdadeiro se $a ou $b são verdadeiros mas não ambos
  • 37. OPERADORES LÓGICOS Exemplos <?php // $a será false $a = (false && false); // $b será false $b = (true  && false); // $c será verdadeiro $c = (true && true); // $d será verdadeiro $d = (true  and  true); //$e sera true $e = false || true; // $f sera true $f = false or true; ?> Friday, October 4, 13
  • 38. OPERADORES DE STRING Os operadores de string permiter concatenar (juntar) duas strings é utilizado o . (ponto) ou .= <?php $a = "Olá "; $b = $a . "mundo!"; // agora $b contém "Olá mundo!" $a = "Olá "; $a .= "mundo!";// agora $a contém "Olá mundo!" //é igual a $a = $a . “mundo” --> $a = “Olá “ . “mundo!” ?> Friday, October 4, 13
  • 39. OPERADORES DE ARRAY Segue a lista de operadores de arrays Exemplo Nome Resultado $a + $b União de $a e $b $a == $b Igualdade TRUE se $a e $b tiverem os mesmos pares de chave/ valor $a === $b Identico TRUE se $a e $b tem os mesmos pares de chave/valor na mesma ordem e do mesmo tipo. $a != $b Desigualdade TRUE se $a for diferente de $b $a <> $b Desigualdade TRUE se $a for diferente de $b $a !== $b Friday, October 4, 13 União Não Identico TRUE se $a não for identico a $b
  • 40. OPERADORES DE ARRAY Exemplo de união <?php $a = array("a" => "maçã", "b" => "banana"); $b = array("a" =>"pêra", "b" => "framboesa", "c" => "morango"); $c = $a + $b; // Uniao de $a e $b echo "União de $a e $b: n"; var_dump($c); $c = $b + $a; // União de $b e $a echo "União de $b e $a: n"; var_dump($c); ?> Friday, October 4, 13
  • 41. OPERADORES DE ARRAY Exemplo de igualdade <?php $a = array("maçã", "banana"); $b = array(1 => "banana", "0" => "maçã"); var_dump($a == $b); // bool(true) var_dump($a === $b); // bool(false) ?> Friday, October 4, 13
  • 42. EXERCÍCIOS Tendo $x=10; e $y=7; escreva um código que imprima o seguinte resultado. 10 10 10 10 10 + 7 = 17 -7=3 * 7 = 70 / 7 = 1.4285714285714 %7=3 Utilize os operadores aritméticos. Não imprima o texto, use as variáveis $x e $y e uma terceira para o como $resultado. Friday, October 4, 13
  • 43. EXERCÍCIOS Crie uma variável chamada $valor imprima e seguinte texto. (Faça as operações citadas) Valor é 8. Adicione 2. Valor agora é 10. Subtraia 4. Valor agora é 6. Multiplique por 5. Valor agora é 30. Divida por 3. Valor agora é 10. Incremente em 1. Valor agora é 11. Decremente em 1. Valor agora é 10. Friday, October 4, 13
  • 44. EXERCÍCIOS Crie uma variável chamada $valor imprima e seguinte texto. (Faça as operações citadas) Valor é 8. Adicione 2. Valor agora é 10. Subtraia 4. Valor agora é 6. Multiplique por 5. Valor agora é 30. Divida por 3. Valor agora é 10. Incremente em 1. Valor agora é 11. Decremente em 1. Valor agora é 10. Friday, October 4, 13
  • 45. EXERCÍCIOS Crie uma variável chamada de $certo=”certo”; e imprima a seguinte frase usando contatenação de string com a variável $certo. Quando é pra dar certo, vai dar certo! Friday, October 4, 13
  • 46. EXERCÍCIOS Crie uma variável chamada $valor e atribua tipos de dados para imprimir esse resultado. Dica: a função que retorna o tipo de dado é gettype($var) Dica: use concatenação de string $valor $valor $valor $valor $valor Friday, October 4, 13 é é é é é string. double. boolean. integer. NULL.
  • 47. ESTRUTURAS DE CONTROLE IF/ELSE O construtor if é um dos recursos mais importantes em várias linguagens de programação, PHP inclusive. Ele permite a execução condicional de um trecho de código. Estrutura do if if (expressao) codigo a ser executado O código é executado caso a expressão seja verdadeira (true) Friday, October 4, 13
  • 48. ESTRUTURAS DE CONTROLE IF/ELSE A expressao na condicional é avaliada como um valor boleano, executando o código caso o valor da expressão seja verdadeiro. Exemplo <?php if ($a > $b)   echo "a é maior que b"; ?> Friday, October 4, 13
  • 49. ESTRUTURAS DE CONTROLE IF/ELSE Para executar mais de um comando dentro da condicional utilizamos bloco de comandos com {} Exemplo <?php if ($a > $b) {   echo "a é maior b";   $b = $a; } ?> Friday, October 4, 13
  • 50. ESTRUTURAS DE CONTROLE IF/ELSE Geralmente temos a necessidade de executar um trecho de código caso e expressão seja verdadeira e outro caso ela seja falsa, para isso utilizamos o else junto com o operador if. Exemplo <?php if ($a > $b) {   echo "a é maior b";   $b = $a; } else { echo "a não é maior b"; } ?> Friday, October 4, 13
  • 51. ESTRUTURAS DE CONTROLE IF/ELSE Outra necessidade comum é fazer várias comparações em sequência, para tal utilizamos o elseif ou else if Exemplo <?php if ($a > $b) {     echo "a é maior que b"; } elseif ($a == $b) {     echo "a é igual a b"; } else {     echo "a é menor que b"; } ?> Pode-se encadeiar vários elseif Friday, October 4, 13
  • 52. ESTRUTURAS DE CONTROLE SWITCH O switch funciona de forma similar a uma série de if/elseif encadeiados. Útil para comparar vários valores sobre uma mesma expressão. Friday, October 4, 13
  • 53. ESTRUTURAS DE CONTROLE SWITCH Exemplo <?php if ($i == 0) {     echo "i é igual a 0"; } elseif ($i == 1) {     echo "i é igual a 1"; } elseif ($i == 2) {     echo "i é igual a 2"; } switch ($i) {     case 0:         echo "i igual 0";         break;     case 1:         echo "i igual 1";         break;     case 2:         echo "i igual 2";         break; } ?> Friday, October 4, 13
  • 54. ESTRUTURAS DE CONTROLE FOR FOR é utilizado para criar laços de repetição. Que permite que você execute um determinado trecho de código por repetidas vezes. Estrutura básica do for for (expressao; expressao2; expressao3) codigo a ser executado Friday, October 4, 13
  • 55. ESTRUTURAS DE CONTROLE FOR for (expressao; expressao2; expressao3) codigo a ser executado A primeira expressão é executada no começo do laço A segunda expressão é avaliada a cada iteração. Se o resultado for true o laço continua caso contrário é interrompido. A terceira expressão é executada no fim de iteração Friday, October 4, 13
  • 57. ESTRUTURAS DE CONTROLE WHILE O while é o tipo de laço mais simples do PHP. Sua estrutura básica é: while (expressao) codigo a ser executado Enquanto a expressão for verdadeira o código do laço será executado. <?php $i = 1; while ($i <= 10) {     echo $i++; } ?> Friday, October 4, 13
  • 58. ESTRUTURAS DE CONTROLE WHILE Uma variação do while é o laço do-while, a única diferença para o while é que a expressão é testada no final de cada iteração ao invés de ser no comeco como é no while <?php $i = 0; do {     echo $i; } while ($i > 0); ?> Friday, October 4, 13
  • 59. ESTRUTURAS DE CONTROLE FOREACH O foreach é uma solução poderosa para iterar sobre arrays ou objetos. Funciona apenas com esses tipos de dados. Sintaxe básica do foreach foreach (array as $valor) codigo foreach (array as $chave => $valor) codigo Na primeira forma a cada iteração o valor atual do array é atribuido a variável valor. Na segunda forma acontece a mesma coisa, apenas atribuindo a chave atual na variável $chave Friday, October 4, 13
  • 60. ESTRUTURAS DE CONTROLE FOREACH <?php /* exemplo 1: imprime apenas valores */ $a = array(1, 2, 3, 17); foreach ($a as $v) {     echo "O valor atual de $v: $v.n"; } /* exemplo 2: imprime o valor e a posição do array */ $a = array(1, 2, 3, 17); $i = 0; /* apenas para fins educativos */ foreach ($a as $v) {     echo "$a[$i] => $v.n";     $i++; } /* exemplo 3: imprime chave e valor */ $a = array(     "um" => 1,     "dois" => 2,     "tres" => 3,     "desessete" => 17 ); foreach ($a as $k => $v) {     echo "$a[$k] => $v.n"; } ?> Friday, October 4, 13
  • 61. EXERCÍCIOS Faça um script PHP que pegue o mês atual e verifique se é setembro if-else e imprima a seguinte mensagem: Dica: a função date(‘F’) retorna o mês (provavelmente em inglês) Estamos em setembro!!! Não estamos em setembro =( Altere o valor do mês para qualquer outro valor e teste se cai na condicional else. Friday, October 4, 13
  • 62. EXERCÍCIOS Escreva um script PHP que através de um laço imprima as seguintes mensagens abc abc abc abc abc abc abc abc abc xyz xyz xyz xyz xyz xyz xyz xyz xyz 123456789 1. 2. 3. 4. 5. 6. Item Item Item Item Item Item A B C D E F Utilize while no primeiro laço, do-while no segundo e for nos dois últimos. Sem utilizar arrays neste exercício. Friday, October 4, 13
  • 63. EXERCÍCIOS Utilize um laço for para imprimir uma lista de números ao quadrado de 1 a 12 1 * 1 = 2 * 2 = 3 * 3 = ... 12 * 12 1 4 9 = 144 Utilize as variáveis do laço para imprimir os números. Friday, October 4, 13
  • 64. EXERCÍCIOS Utilize dois laços for para imprimir uma tabela de multiplicação como esta: Dica utilize um for para as linhas e outro para as colunas. Friday, October 4, 13
  • 65. FUNÇÕES Uma função é um pedaço de código que realiza alguma tarefa específica, podendo ser chamada quantas vezes for necessária. Uma função é definida com a palavra reservada function uma declaração de função segue essa estrutura: <?php function teste ($arg_1, $arg_2, /* ..., */ $arg_n) {     echo "Exemplo de função.n";     return $valor_retornado; } ?> O nome de função segue a mesma regra de nomes de variáveis. Pode ter N argumentos. Não é obrigatório retornar nada (return) Friday, October 4, 13
  • 66. FUNÇÕES <?php //Define a função teste sem argumentos function teste () {     echo "Olá mundo."; } //Executa a função teste(); //Irá imprimir Olá mundo. //Define uma função com argumento function teste ($complemento) {     echo "Olá " . $complemento; } //Executa a função teste("mundo"); //Irá imprimir Olá mundo //Executa a função teste("batata"); //Irá imprimir Olá batata ?> Friday, October 4, 13
  • 67. FUNÇÕES Para retornar valores é utilizado a palavra return. <?php function quadrado ($num) {     return $num * $num; } echo quadrado (4);   // imprime '16'. ?> A palavra return não imprime resultados na tela, apenas retorna o valor para quem chamou a função. Friday, October 4, 13
  • 68. EXERCÍCIOS Escreva e chame uma função que imprima a frase ola mundo! Escreva uma nova função que aceite um parametro e exiba na saudação. ola batata! Friday, October 4, 13
  • 69. EXERCÍCIOS Escreva e chame uma função receba dois argumentos, realize um calculo e devolva a área de um retângulo com a seguinte frase. Para um retângulo de altura $h e largura $l a área é $area Friday, October 4, 13
  • 70. EXERCÍCIOS Faça uma função que receba um argumento diga se o número informado é par O número X é par O número X não é par Friday, October 4, 13
  • 71. EXERCÍCIOS Faça uma função que receba um argumento e calcule seu fatorial. Dica: pode-se utilizar laço for Escreva uma nova função que calcule o fatorial de um número utilizando recursividade. Friday, October 4, 13
  • 72. ORIENTAÇÃO A OBJETOS O suporte a orientação foi adicionado ao PHP na versão 4. Toda a parte de orientação a objetos foi reescrita na versão 5. Orientação a objetos nada mais é do que passar para uma linguagem de computador a compreensão que já temos do mundo real. Friday, October 4, 13
  • 73. ORIENTAÇÃO A OBJETOS Todo objeto do mundo real que queremos representar será transformado numa classe e seus atributos serão propriedades e métodos. Exemplo vamos supor que queremos representar uma árvore, iriamos definir a classe como arvore e seus atributos como tamanho, quantidade de galhos, quantidade de folhas, se é frutifera ou não seria convertidos em propriedades e métodos. Friday, October 4, 13
  • 74. ORIENTAÇÃO A OBJETOS Para definir uma classe utilizamos a palavra class seguido do nome da classe (lembrar da regras de nomes do PHP) Definição básica de uma classe em PHP <?php class arvore {      } ?> Dentro da classe podemos definir suas propriedades e métodos, basicamente as propriedades são variaveis dentro da classe e os métodos funções criadas dentro da classe. Friday, October 4, 13
  • 75. ORIENTAÇÃO A OBJETOS Exemplificando vamos criar uma classe olaMundo com um método ola() <?php //define uma classe class olaMundo { //define um método     function ola() { echo "Olá mundo."; } } //instancia classe A e chama método $instancia_a = new A(); $instancia_a->ola(); ?> Friday, October 4, 13
  • 76. ORIENTAÇÃO A OBJETOS Ao se criar uma classe uma pseudo variável $this fica disponível para chamar propriedades e métodos dentro do contexto da classe. <?php //define uma classe class olaMundo { //define um método     function ola() { echo "Olá "; $this->mundo(); //executa o metodo mundo() } //define um método     function mundo() { echo "mundo."; } } //instancia classe A e chama método $instancia_a = new olaMundo(); $instancia_a->ola(); ?> Friday, October 4, 13
  • 77. ORIENTAÇÃO A OBJETOS VISIBILIDADE Ao se definir uma classe nem sempre queremos deixar os métodos e propriedades visíveis para serem acessados livremente. Para isso podemos definir “níveis” de visibilidade para as propriedades e métodos, são eles: public: Não impõem nenhum restrição de acesso protected: Métodos e propriedades apenas acessíveis dentro da classe ou classes que a herdem private: Métodos e propriedades acessíveis apenas dentro da classe. Friday, October 4, 13
  • 78. ORIENTAÇÃO A OBJETOS VISIBILIDADE <?php /**  * Define MinhaClasse  */ class MinhaClasse {     public $publica = 'Publica';     protected $protegida = 'Protegida';     private $privada = 'Privada';     public function imprimeAlo()     {         echo $this->publica;         echo $this->protegida;         echo $this->privada;     } } $obj = new MinhaClasse(); echo $obj->publica; // Funciona echo $obj->protegida; // Erro Fatal echo $obj->privada; // Erro Fatal $obj->imprimeAlo(); //Mostra Public, Protected e Private Friday, October 4, 13
  • 79. ORIENTAÇÃO A OBJETOS CONSTRUTORES/DESTRUTORES O PHP tem dois métodos mágicos para as classes um é o __contruct() e o outro é o __destruct() Esses métodos são chamados automáticamente em momentos distintos, como o nome sugere o __construct() é chamado quando a instância é criada e o __destruct() quando a instância é destruída. Friday, October 4, 13
  • 80. EXERCÍCIOS Crie uma classe chamada olaMundo e um método digaOi() que imprima a mensagem “olá mundo”. Crie um método na classe olaMundo que receba um parâmetro e exiba na tela uma saudação como “olá Fulano”. Cria uma classe que exiba a mensagem “olá mundo” na inicialização da instância. Friday, October 4, 13
  • 81. EXERCÍCIOS Refaça o exercício para calcular a área de um retângulo separando o método que faz o cálculo do que exibe a mensagem. Faça uma classe que cálcule o fatorial de um número. Receba o número no construtor e verifique se ele é válido. Crie um método chamado resultado para retornar a resposta. Crie uma classe chamada Calculadora que receba dois parametros no construtor. Implemente quatro métodos Adicao(), Subtracao(), Multiplicacao() e Divisao() que retorne os resultados correspondentes Friday, October 4, 13
  • 82. ORIENTAÇÃO A OBJETOS HERANÇA A herança funciona de forma que os métodos e propriedades definidos numa classe ‘pai’ possa ser acessada (herdada) para uma classe ‘filha’. No PHP para declarar que uma classe herda as propriedades de outras usamos a palavra extends. Por exemplo vamos analizar uma moto e um carro. Ambos tem características em comum como rodas, marcha, velocidade, etc. Podemos criar uma classe genérica chamada Veiculo com os atributos de ambos. Friday, October 4, 13
  • 83. ORIENTAÇÃO A OBJETOS HERANÇA <?php class Veiculo { public $marcha; public $quantidadeRodas; public function passarMarcha() { // código } public function andar() { // código } } class Carro extends Veiculo { public function __construct() { $this->quantidadeRodas = 4; } } $carro = new Carro(); $carro->andar(); ?> Friday, October 4, 13
  • 84. ORIENTAÇÃO A OBJETOS CLASSES ABSTRATAS No PHP5 foi introduzido métodos e classes abstratas. De forma bem resumida uma classe e métodos abstratos servem como modelo para uma classe concreta. Quando uma classe herda uma classe abstrata todos os métodos marcados como abstratos devem ser implementados na classe ‘filha’. Outra coisa importânte é que as assinaturas dos métodos devem coincidir, ou seja, ter os mesmos números de argumentos e tipos. Friday, October 4, 13
  • 85. ORIENTAÇÃO A OBJETOS CLASSES ABSTRATAS <?php abstract class ClasseAbstrata { // Força a classe que estende ClasseAbstrata a definir esse método     abstract protected function pegarValor();          // Método comum     public function imprimir() {         print $this->pegarValor();     } } class ClasseConcreta1 extends ClasseAbstrata { // obrigado definir esse método     protected function pegarValor() {         return "ClasseConcreta1";     } } ?> Friday, October 4, 13
  • 86. EXERCÍCIOS Refaça novamente a classe Calculadora criando uma classe abstrata com todos os métodos abstratos para realização dos cálculos, implemente numa classe filha. Friday, October 4, 13
  • 87. EXERCÍCIOS Crie uma classe Equipamento com o atributo ligado (tipo boolean) e com os métodos liga e desliga. O método liga torna o atributo ligado true e o método desliga torna o atributo ligado false Friday, October 4, 13
  • 88. EXERCÍCIOS Uma sub-classe EquipamentoSonoro que herda as características de Equipamento e que possui os atributos volume que varia de 0 a 10 e stereo (do tipo boolean). A classe ainda deve possuir métodos para ler e alterar o volume (getter e setter), além dos métodos mono e stereo. O método mono torna o atributo stereo falso e o método stereo torna o atributo stereo verdadeiro. Ao ligar o EquipamentoSonoro através do método liga, seu volume é automaticamente ajustado para 5 Friday, October 4, 13
  • 89. EXERCÍCIOS Faça um script PHP que instancia 2 objetos da classe Equipamento e 2 objetos da classe EquipamentoSonoro. O script ainda deve inserir esses objetos em um array e, depois, listar todos os elementos do array. Friday, October 4, 13
  • 90. INCLUDE / REQUIRE O PHP fornece alguns comandos para inclusão de arquivos do tipo php em sua aplicação são eles include, require, include_once, require_once Todos fazem a mesma coisa, incluem um arquivo PHP no seu script include emite um “warning” caso o arquivo não seja encontrado. requere emite um “error” caso o arquivo não seja encontrado. Friday, October 4, 13
  • 91. FUNCIONALIDADES WEB SUPERGLOBAIS O PHP existem algumas variáveis pré definidas chamadas de superglobais. São acessíveis em todo escopo do script. As principais delas são $GLOBALS: Um array associativo contendo todas as variáveis no escopo global do arquivo. $_SERVER: Um array contendo informações sobre o servidor. As entradas neste array são criadas pelo servidor web. Friday, October 4, 13
  • 92. FUNCIONALIDADES WEB SUPERGLOBAIS $_GET: Um array associativo de variáveis passadas para o script atual através do método HTTP GET. $_POST: Um array associativo de variáveis passadas para o script atual através do método HTTP POST. $_FILES: Um array associativo de arquivos enviados para o script atual com o método HTTP POST. Friday, October 4, 13
  • 93. FUNCIONALIDADES WEB SUPERGLOBAIS $_COOKIE: Um array associativo com os cookies setados em sua aplicação. $_SESSION: Um array associativo com as variáveis de sessão em sua aplicação $_REQUEST: Um array associativo com os dados de $_GET, $_POST e $_COOKIE $_ENV: Um array associativo com as variáveis de ambiente. Friday, October 4, 13
  • 94. SESSÕES As sessões permitem os dados pré determinados estejam disponíveis em acessos subsequentes. Para iniciar uma sessão usamos o comando session_start() Para registrar uma variável na sessão usamos a superglobal $_SESSION Para destruir uma sessão usamos o session_destroy() Friday, October 4, 13
  • 97. EXERCÍCIO Crie um script que inicie uma sessão e que exiba as seguintes informação ID da sessão; Data de criação da sessão; Data de último acesso; Número de visitas anteriores; Dica: id da sessão session_id() Dica: data de criação time() ou date(‘d/m/Y’) Dica: utilize isset() Friday, October 4, 13
  • 98. REQUISIÇÃO GET A superglobal $_GET contém todas as variáveis passas por uma requisição HTTP GET <?php echo 'Olá ' . $_GET["nome"]; // ou print_r para imprimir todas as chaves e valores print_r($_GET); ?> Friday, October 4, 13
  • 99. REQUISIÇÃO POST A superglobal $_POST contém todas as variáveis passas por uma requisição HTTP POST <?php echo 'Olá ' . $_POST["nome"]; // ou print_r para imprimir todas as chaves e valores print_r($_POST); ?> Friday, October 4, 13
  • 100. COOKIES Cookies permiter salvar dados no navegador do usuário permitindo o acompanhamento ou identificação dos usuário quando retornam a página, para setar um cookie utilizamos a função setcookie() bool setcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [,bool $secure = false [, bool $httponly = false ]]]]]] ) O cookie deve ser setado antes de ter qualquer saida para tela Friday, October 4, 13
  • 101. COOKIES <?php $value = 'alguma coisa de algum lugar'; setcookie("CookieTeste", $value); /* expira em 1 hora */ setcookie("CookieTeste", $value, time()+3600);   /* Imprimindo valor do cookie */ // Mostra um cookie individual echo $_COOKIE["CookieTeste"]; /* Outra maneira de depurar(debug)/testar é vendo todos os cookies */ print_r($_COOKIE); ?> Friday, October 4, 13
  • 102. EXERCÍCIO Crie um script PHP (funcionario.php) contendo uma classe Funcionario com atributos privados nome e salario. A classe deverá ter um construtor que receba os atributos como parâmetros. Além disso, deve ter métodos para obter e alterar os atributos nome e salário (getNome, setNome, getSalario, setSalario). O salário jamais poderá ser negativo. Crie também um método __toString() para retornar uma string contendo todos os atributos. Friday, October 4, 13
  • 103. EXERCÍCIO Crie um script PHP (processa.php) que recebe dados (nome e salário) de um formulário (formulario.php), instancia um objeto Funcionario (funcionario.php), preenche o objeto com os dados vindos do formulário e, depois, exibe esse objeto em um outro script (mostra.php). Friday, October 4, 13
  • 104. BANCO DE DADOS O PHP suporta diversos banco de dados. Neste curso será abordado como trabalhar com o banco de dados MySQL Para se conectar com o bando de dados podemos utilizar a extensão mysqli ou PDO_MySQL. Friday, October 4, 13
  • 105. BANCO DE DADOS Estrutura do mysqli mysqli(endereco, usuario, senha, banco_de_dado, porta) endereco: Nome ou IP onde está localizado o servidor MySQL; usuario: Usuário para se conectar ao servidor MySQL; senha: Senha para se conectar ao servidor MySQL; banco_de_dados: Nome da base de dados que será utilizada; porta: Porta do serviço MySQL Friday, October 4, 13
  • 106. BANCO DE DADOS Exemplo de conexão com banco de dados: <?php //conecta com servidor e banco de dados $mysqli = new mysqli("localhost", "usuario", "senha", "banco"); //verifica se houve algum erro ao conectar if ($mysqli->connect_errno) {     echo "Erro ao conectar com mysql: " .  $mysqli->connect_error; } ?> Friday, October 4, 13
  • 107. BANCO DE DADOS Com a conexão pronta podemos realizar consultas no banco de dados. <?php //conecta com servidor e banco de dados $mysqli = new mysqli("localhost", "usuario", "senha", "banco"); //verifica se houve algum erro ao conectar if ($mysqli->connect_errno) {     echo "Erro ao conectar com mysql: " .  $mysqli->connect_error; } $consulta = $mysqli->query("SELECT * FROM cidade"); while ($resultado = $consulta->fetch_assoc()) { print_r($resultado); } ?> Friday, October 4, 13
  • 108. EXERCÍCIO Criar uma tabela no banco de dados; Conectar com mysqli; Inserir registro; Consultar; Apagar registro; Atualizar um Registro Friday, October 4, 13
  • 109. STRINGS Assim como os arrays as strings são muito utilizadas nas aplicações, segue uma lista de funções básicas. strlen devolve o tamanho da string. <?php $str = 'abcdef'; echo strlen($str); // 6 $str = ' ab cd '; echo strlen($str); // 7 ?> Friday, October 4, 13
  • 110. STRINGS É possível cada caracter de uma string ou exibir um caracter específico <?php $str = 'abcdef'; echo $str{2}; // c echo $str{0}; // a ?> Imprimir uma string com for Friday, October 4, 13
  • 111. STRINGS Transformar toda uma string em letras minusculas <?php $str = 'ABC'; echo strtolower($str); // abc ?> ou maiusculas <?php $str = 'abc'; echo strtoupper($str); // ABC ?> Friday, October 4, 13
  • 112. STRINGS Para procurar um texto dentro de uma string podemos usar o strpos(string, o_que_quero_procurar) <?php $string = 'abc'; $procurar   = 'a'; $pos = strpos($string, $procurar); if ($pos === false) {     echo "A string '$procurar' não foi encontrada em '$string'"; } else {     echo "A string '$procurar' foi encontrada em '$string'";     echo " na posição $pos"; } ?> Friday, October 4, 13
  • 113. STRINGS strip_tags(string) remove todas as tags HTML de uma string <?php $texto = '<p>Teste de paragrafo.</p> <a href="#link">Ir</a>'; echo strip_tags($texto); Friday, October 4, 13
  • 114. STRINGS str_replace(procurar, substituir, string) para substituir uma string por outra <?php // Retorna: <body text='black'> $body = str_replace("%body%", "black", "<body text='%body%'>"); // Retorna: Você deveria comer pizza, cerveja e sorvete todo dia $f  = "Você deveria comer frutas, vegetais e fibras todo dia."; $saudavel = array("frutas", "vegetais", "fibras"); $yummy   = array("pizza", "cerveja", "sorvete"); $body = str_replace($saudavel, $yummy, $f); ? Friday, October 4, 13
  • 115. STRINGS explode(delimitador, string) para explodir uma string para um array <?php $pizza  = "pedaco1|pedaco2|pedaco3|pedaco4|pedaco5|pedaco6"; $pedacos = explode("|", $pizza); echo $pedacos[0]; // pedaco1 echo $pedacos[1]; // pedaco2 $data  = "20/02/1988”; $dt_arr = explode("/", $p); echo $dt_arr[0]; // 20 echo $dt_arr[1]; // 02 echo $dt_arr[2]; // 1988 Friday, October 4, 13
  • 116. NAMESPACES Em projetos muito grandes pode acontecer de ser definido duas classes com o mesmo nome. Para evitar esse tipo de problema usamos o namespace para atribuir uma organização virtual a cada classe Recomendado utilizar um namespace por arquivo Friday, October 4, 13
  • 117. NAMESPACES Para definir um namespace utilizamos a palavra namespace seguido de seu ‘caminho’ (o namespace funciona como se fosse pastas) <?php // Foo.php namespace CSFerramentas; class OlaMundo { public function digaOi() { } } ?> Friday, October 4, 13
  • 118. NAMESPACES Para definir um namespace utilizamos a palavra namespace seguido de seu ‘caminho’ (o namespace funciona como se fosse pastas) <?php // Foo.php namespace CSFerramentas; class OlaMundo { public function digaOi() { } } ?> Friday, October 4, 13
  • 119. NAMESPACES E para instanciar a classe com namespace fazemos assim: <?php require 'Foo.php'; $ola = new CSFerramentasOlaMundo(); ?> OU <?php require 'Foo.php'; use CSFerramentasOlaMundo; $ola = new OlaMundo(); ?> Friday, October 4, 13
  • 120. PROJETO Criar um Blog em PHP com uma tabela no banco de dados para representar o título da postagem, conteúdo e autor. Criar uma página para exibir todas as postagens Criar uma página para cadastrar nova postagem Criar uma página para editar a postagem Friday, October 4, 13
  • 121. KOHANA O Kohana é um framework em PHP, open source (código aberto), construído sobre o PHP5, orientado a objetos e com o padrão MVC Friday, October 4, 13
  • 123. KOHANA O Model é responsável pela comunicação com banco de dados, obtenção de dados, validação, etc. A View é responsável pela exibição dos dados para o usuário final, incluindo informações processadas, imagens, css, js. A Controller cuida de toda a parte lógica da aplicação, processar os dados obtidos da Model enviar para a View. Friday, October 4, 13
  • 124. PADRÃO DE CODIFICAÇÃO Cada framework tem sua própria filosofia e melhores práticas de codificação, mas no ano de 2009 foi criado um grupo de desenvolvedores de vários frameworks para definir boas práticas de programação para a linguagem. Não é um grupo oficial do PHP, mas é formado por representantes de vários frameworks atuais, o nome do grupo é PHP-FIG, sendo FIG um acrônimo para (Framework Interoperability Group). Friday, October 4, 13
  • 125. PADRÃO DE CODIFICAÇÃO Até o momento foram criadas quatro PSR, que são as melhores práticas para o desenvolvimento utilizando PHP, sendo elas: PSR-0: Focado em manter uma convenção de arquivo, classe e namespace para o carregamento automático do código (autoloading) (https://github.com/php-fig/fig-standards/blob/master/ accepted/PSR-0.md) PSR-1: Focado em definir os elementos padrões de codificação que são necessários para assegurar um elevado nível de interoperabilidade técnica entre o código PHP compartilhado. (https://github.com/php-fig/fig-standards/blob/master/accepted/ PSR-1-basic-coding-standard.md) Friday, October 4, 13
  • 126. PADRÃO DE CODIFICAÇÃO PSR-2: Focado no padrão de codificação utilizando PHP para padronização do código (https://github.com/php-fig/fig-standards/ blob/master/accepted/PSR-1-basic-coding-standard.md) PSR-3: Define uma interface padrão para uma interface de log (https://github.com/php-fig/fig-standards/blob/master/accepted/ PSR-3-logger-interface.md) Friday, October 4, 13
  • 127. PADRÃO DE CODIFICAÇÃO Atualmente o Kohana não faz parte do grupo PHP-FIG, mas possui uma documentação bem detalhada do seu padrão de codificação e segue alguns padrões do PSR. Nomes de classes e locais de arquivos As classes no Kohana devem tem a primeira letra maiuscula e utilizar underscore(_) para separar as palavras. Todas as classes devem ficar na pasta classes. Friday, October 4, 13
  • 128. PADRÃO DE CODIFICAÇÃO Nome da classe localização Controller_Template classes/Controller/Template.php Model_User classes/Model/User.php Model_BlogPost classes/Model/BlogPost.php Database classes/Database.php Database_Query classes/Database/Query.php Form classes/Database/Query.php Friday, October 4, 13
  • 129. PADRÃO DE CODIFICAÇÃO Uso de chaves em estruturas de controle As chaves devem ser colocados em suas próprias linhas, indentado com o comando da estrutura de controle. // Forma correta if ($a === $b) { ... } else { ... } // forma errada if ($a === $b) { ... } else { ... } Friday, October 4, 13
  • 130. PADRÃO DE CODIFICAÇÃO Uso de chaves em classes A excessão da regra de como devem ficar as chaves é na declaração da classe onde a chave começa ao lado do nome da classe e não em sua própria linha. // Correto class Abacate { // Incorreto class Abacate { Friday, October 4, 13
  • 131. PADRÃO DE CODIFICAÇÃO Chaves vazias Em caso de utilizar chaves vazias não coloque nenhum caracter entre eles (espaco ou nova linha) // Correto class Abacate {} // Incorreto class Abacate { } Friday, October 4, 13
  • 132. PADRÃO DE CODIFICAÇÃO Arrays Os arrays podem ser definidos tanto em uma linha como em multiplas linhas. array('a' => 'b', 'c' => 'd'); array( 'a' => 'b', 'c' => 'd', ); Friday, October 4, 13
  • 133. PADRÃO DE CODIFICAÇÃO Abrindo parenteses A abertura de parenteses vai na mesma linha, sendo fechado no mesmo nível da declaração. // Correto array( ... ) // Incorreto: array ( ... ) Friday, October 4, 13
  • 134. PADRÃO DE CODIFICAÇÃO Convenção de nomes de classes O Kohana utiliza underscore (_) no nome das classes e não o camelCase. // Controller class, uses Controller_ prefix class Controller_Apple extends Controller { // Model class, uses Model_ prefix class Model_Cheese extends Model { // Regular class class Peanut { Friday, October 4, 13
  • 135. PADRÃO DE CODIFICAÇÃO Quando for instanciar uma nova classe não utilize parenteses se não for passado nenhum parametro para o construtor da classe. // Correto: $db = new Database; // Incorreto: $db = new Database(); Friday, October 4, 13
  • 136. PADRÃO DE CODIFICAÇÃO Funções e métodos Devem ser todas em letras minusculas e utilizar underscore para separar as palavras. function drink_beverage($beverage) { Friday, October 4, 13
  • 137. PADRÃO DE CODIFICAÇÃO Variáveis Mesmo padrão de métodos, deve-se utilizar letras minusculas e underscore. // Correto: $foo = 'bar'; $long_example = 'uses underscores'; // Incorreto: $weDontWantThis = 'understood?'; Friday, October 4, 13
  • 138. PADRÃO DE CODIFICAÇÃO Indentação A indentação deve utilizar tabs e nunca espaços Friday, October 4, 13
  • 139. PADRÃO DE CODIFICAÇÃO Concatenação de string Não utiliza espaços entre o operador de concatenação // Correto: $str = 'one'.$var.'two'; // Incorreto: $str = 'one'. $var .'two'; $str = 'one' . $var . 'two'; Friday, October 4, 13
  • 140. PADRÃO DE CODIFICAÇÃO Operadores de comparação Utilizar OR e AND para comparação // Correto: if (($foo AND $bar) OR ($b AND $c)) // Incorreto: if (($foo && $bar) || ($b && $c)) Friday, October 4, 13
  • 141. PADRÃO DE CODIFICAÇÃO Utilizar elseif ou invés de else if // Correto: elseif ($bar) // Incorreto: else if($bar) Friday, October 4, 13
  • 142. PADRÃO DE CODIFICAÇÃO Constantes Utilizar sempre caracteres maiusculos // Correto: define('MY_CONSTANT', 'my_value'); $a = TRUE; $b = NULL; // Incorreto: define('MyConstant', 'my_value'); $a = True; $b = null; Friday, October 4, 13
  • 143. PADRÃO DE CODIFICAÇÃO Constantes Utilizar sempre caracteres maiusculos // Correto: define('MY_CONSTANT', 'my_value'); $a = TRUE; $b = NULL; // Incorreto: define('MyConstant', 'my_value'); $a = True; $b = null; Friday, October 4, 13
  • 144. KOHANA Instalação do Kohana: Puxar framework no site; Verificar se o ambiente esta ok (install.php) Configurar o Kohana (bootstrap) Mover arquivo de instalação Hello World Friday, October 4, 13
  • 145. CONFIGURAÇÃO A maior parte da configuração de ambiente do Kohana é feita no arquivo bootstrap, localizado em application/bootstrap.php As principais configurações que devem ser feitas são timezone e locale e base_url Friday, October 4, 13
  • 146. CONFIGURAÇÃO Também é possivel habilitar e desabilitar módulos Kohana::modules(array( // 'auth' => MODPATH.'auth', // 'cache' => MODPATH.'cache', // 'codebench' => MODPATH.'codebench', // 'database' => MODPATH.'database', // 'image' => MODPATH.'image', // 'minion' => MODPATH.'minion', // 'orm' => MODPATH.'orm', // 'unittest' => MODPATH.'unittest', // 'userguide' => MODPATH.'userguide', )); Friday, October 4, 13 // // // // // // // // // Basic authentication Caching with multiple backends Benchmarking tool Database access Image manipulation CLI Tasks Object Relationship Mapping Unit testing User guide and API documentation
  • 147. FLUXO DA REQUISIÇÃO O fluxo começa no arquivo index.php, nessa etapa são definidos os caminhos da aplicação, dos modulos e do sistema (APPPATH, MODPATH, SYSPATH) Então entra em ação o bootstrap.php, carregando a classe Kohana, então é chamado o método Kohana:init responsável por iniciar a aplicação, configurar URL padrão (base_url), gerenciador de erros, cache e log. Friday, October 4, 13
  • 148. FLUXO DA REQUISIÇÃO Nesta etapa também são carregados os módulos, o controle de rotas e a classe de request. A classe Request (requisição) inicia, verifica se a rota existe, redireciona para o controller apropriado e devolve a reposta novamente para index, que exibe o resultado. Friday, October 4, 13
  • 149. ROTAS O Kohana fornece um sistema de roteamento poderoso, permitindo fazer uma ligação com qualquer fragmento de URL com uma controller e action. A rota padrão (default) do Kohana fica no arquivo bootstrap.php, cada rota no sistema deve ter um nome unico. Route::set('default', '(<controller>(/<action>(/<id>)))') ->defaults(array( 'controller' => 'Welcome', 'action' => 'index', )); Friday, October 4, 13
  • 150. ROTAS Este trecho de código cria a rota default, ao utilizar o método Route::set o primeiro parametro é o nome da rota, esse nome deve ser unico no sistema, e o segundo paramento é qual o padrão de URL que será casado neste exemplo é (<controller>(/ <action>(/<id>))). Esse padrão vai pegar o valor passado no token <controller> e procurar por um controller no sistema com o mesmo nome, e , fazer o mesmo com <action> e procurar nessa controller esse método. Ainda é utilizado o defaults para setar um valor padrão para a controller e para a action caso não seja passado na URL. Friday, October 4, 13
  • 151. ROTAS Caso o valor da URL seja opcional ou não for presenta na rota, pode-se utilizar o defaults para definir valores padrões. No caso controller e action devem sempre possuir um valor padrão. O Kohana também converte automaticamente o nome do controller para o padrão de nomes, por exemplo: /blog/ver/11 irá procurar pela controller Controller_Blog.php na pasta classes/Controller/Blog.php e executar a ação action_ver() Friday, October 4, 13
  • 152. SESSÕES O Kohana também fornece uma classe para facilitar o uso de sessões. Para acessar a instância da sessão pode ser utilizado o método Session::instance. // Pega a instancia da classe Session $session = Session::instance(); Friday, October 4, 13
  • 153. SESSÕES Todos os dados da sessão podem ser obtidos como array com o método Session::as_array. // pega todos os dados da sessao como array $data = $session->as_array(); Friday, October 4, 13
  • 154. SESSÕES Para setar um novo valor da sessão pode ser usado o método set // armazenar um novo valor $session->set($chave, $valor); // ou Session::instance()->set($chave, $valor); // Exemplo, armazenando id de um usuario $session->set('user_id', 10); Friday, October 4, 13
  • 155. SESSÕES Para pegar um valor já setado usamos o get // Pegar um valor da sessao $data = $session->get($chave, $valor_padrao); // Pegar o id do usuario $user = $session->get('user_id'); Friday, October 4, 13
  • 156. SESSÕES E, para deletar usamos o delete // Deletar um valor da sessao $session->delete($chave); // Deletar o id do usuario (user_id) $session->delete('user_id'); Friday, October 4, 13
  • 157. BANCO DE DADOS O suporte a banco de dados vem desabilitado no Kohana, para habilita-lo é necessário ativar no módulo de database e orm no arquivo bootstrap.php. Após habilitar o módulo de bando de dados e ORM é necessário criar um arquivo de configuração com os dados de acesso ao banco de dados. Um modelo do arquivo pode ser encontrado na pasta modules/ database/config/database.php. Não altere esse arquivo, copie ele para a pasta application/config e então configure seu banco de dados. Friday, October 4, 13
  • 158. BANCO DE DADOS Com o acesso do Kohana ao banco de dados configurado já é possivel fazer as classes da Model (responsável pelas operações com o banco de dados). Para criação dos Models o Kohana estabelece algumas regras: O nome da tabela deve ter o mesmo nome do Model só que no plural. Ex. Model_Blog a tabela deverá ser blogs para Model_Post a tabela devera ser posts. Friday, October 4, 13
  • 159. BANCO DE DADOS O plural das palavras são em inglês, caso você tenha alguma dúvida com o nome escolhido para a tabela pode usar o comando abaixo para verificar qual será o plural ou singular correspondente: echo Inflector::plural('person'); //imprime people echo Inflector::singular('people'); //imprime person Friday, October 4, 13
  • 160. MODEL Umas das vantagens do Kohana é o poder do ORM que permite operações de crud de uma maneira simples, bastando herdar (extends) a classe ORM para sua classe Model, como no exemplo: class Model_Member extends ORM { ... } Friday, October 4, 13
  • 161. MODEL Podemos carregar instancia da Model dessas formas $user = ORM::factory('User'); // Ou $user = new Model_User(); Friday, October 4, 13
  • 162. MODEL Para inserir um valor é bem simples, basta que sua Model herde a classe ORM. Exemplo: // pegando a instancia $usuario = ORM::factory('User'); // definindo dados $usuario->first_name = 'Fulano'; $usuario->last_name = 'de tal'; // salvando $usuario->save(); Friday, October 4, 13
  • 163. MODEL Para procurar um objeto podemos utilizar o método ORM::find, ou passa o ID do objeto diretamente para o construtor da classe ORM. // Procurar usuário com ID 20 $user = ORM::factory('User') ->where('id', '=', 20) ->find(); // Ou no construtor $user = ORM::factory('User', 20); Friday, October 4, 13
  • 164. MODEL Para recuperar todos os objetos da tabela usamos o ORM::find_all. // Retorna todos os usuario no banco $users = ORM::factory('User')->find_all(); Friday, October 4, 13
  • 165. MODEL Para atualizar ou deletar basta recuperar o objeto com uma busca, e em seguida alterar o que for necessario e salva. Ou deletar o objeto. // Procurar usuário com ID 20 $user = ORM::factory('User') ->where('id', '=', 20) ->find(); // Atualiza objeto (altera informações e salva) $user->first_name = "Ciclano"; $user->last_name = "de tal"; $user->save(); // Deletar $user->delete(); Friday, October 4, 13
  • 166. FIM DA PRIMEIRA PARTE Friday, October 4, 13