Desenvolvimento de Aplicativos Web - COLTEC/MG
João Eduardo Montandon
Desenvolvimento de Aplicativos Web - COLTEC/MG
Desenvolvida por Rasmus Lerdorf em 1995: "PHP/FI (Personal Home Page/ Forms Interpreter)".
Hoje: "PHP: Hypertext Processing".
Linguagem de Programação voltada para desenvolvimento de páginas dinâmicas na Internet.
Principais características:
Para desenvolver uma página utilizando PHP, são necessários os seguintes softwares:
<html>
<body>
<?php
$now = date("d/m/Y", time());
echo "Olá, Terráqueo. Agora são: ";
?>
</body>
</html>
<html>
<body>
<?php
$now = date("d/m/Y", time());
echo "Olá, Terráqueo. Agora são: $now";
?>
</body>
</html>
<?php ?>
Delimita código PHP.
$now = ...
Cria uma variável chamada now.
echo "..."
Imprime algo na tela.
PHP possui quatro tipos de dados:
Representa qualquer valo numérico, podendo ser inteiro ou real
$inteiro = 10;
$real = 3.14;
$hexa = 0x0b;
Representa uma sequencia alfanumérica, podendo ser fornecida por meio de aspas duplas (") ou simples(')
echo "Olá, $nome";
echo 'Olá, $nome';
As aspas invertidas (`) permitem que o PHP execute comandos do sistema operacional
<?php
echo `ls -la`;
?>
Os vetores (arrays) são variáveis capazes de armazenar mais de um valor ao mesmo tempo.
A notação utilizada por PHP é a mesma utilizada por Java ([ ]
)
Os índices podem ser definidos tanto por valores númericos e strings.
$vetor[0] = 30;
$vetor[1] = 40;
$vetor[2] = 50;
$vetor[3] = 60;
É possível inserir valores no array sem que seja necessário fornecer um índice.
Neste caso, o PHP irá inserir este elemento no final do array.
$vet[ ] = "Cruzeiro";
$vet[ ] = "bi campeão";
echo "o $vet[0] é $vet[1] da américa!!";
PHP também possui suporte a classes e objetos
class Pessoa {
function saudacao() {
echo "Olá pessoal!!";
}
}
$jose = new Pessoa;
jose->saudacao();
Valores predefinidos no início do programa. Em PHP, constantes podem ser case-insensitive.
bool define(string nome, object valor [, bool case_insensitive]);
define ("PI", 3.14, false);
echo "O valor de PI é " . PI;
As variáveis em PHP são identificadas por meio do símbolo $
Uma variável pode ser local ou global
Podemos acessar variáveis de escopo global de duas formas
global $variavel.
$GLOBALS
$num = 5000;
function escopo() {
global $num;
$num += 5;
echo $num . "<br>";
}
echo $num . "<br>";
escopo();
$num = 5000;
function escopo() {
GLOBALS["num"] += 5;
echo GLOBALS["num"] . "<br>";
}
echo $num . "<br>";
escopo();
Conversor | Descrição |
(int) , (integer)
|
Converte para inteiro. |
(real) , (float) , (double)
|
Converte para ponto flutuante |
(string)
|
Converte para string |
(array)
|
Converte para array |
(object)
|
Converte para object |
$a = a + 1; // adição
$a = a * 5; // multiplicação
$a = a / 3; // divisão
$a = a - 1; // subtração
$a = a % 1; // resto
echo "$a++"; // Pós-incremento
echo "++$a"; // Pré-incremento
echo "$a--"; // Pós-decremento
echo "--$a"; // Pré-decremento
Operador | Descrição |
~$var
|
Inverte os bits de $var |
$var1 & $var2
|
AND bit a bit |
$var1 | $var2
|
OR bit a bit |
$var1 ^ $var2
|
XOR bit a bit |
$var >> N
|
Deslocamento de N bits à direita |
$var << N
|
Deslocamento de N bit à esquerda |
Operador | Descrição |
$var1 == $var2
|
$var1 igual a $var2
|
$var1 >= $var2
|
$var1 maior ou igual a $var2
|
$var1 <= $var2
|
$var1 menor ou igual a $var2
|
$var1 > $var2
|
$var1 maior que $var2
|
$var < $var2
|
$var1 menor que $var2
|
$var != $var2 $var1 <> $var2
|
$var1 diferente a $var2
|
Operador | Descrição |
!$var1
|
Operador de negação |
$var1 && $var2 , $var1 AND $var2
|
Operador AND |
$var1 || $var2 , $var1 OR $var2
|
Operador OR |
$var1 XOR $var2
|
Operador XOR |
$name
<!DOCTYPE html>
<?php
$name = $_GET['name'];
?>
<html>
<body>
<h1>Olá, <?php echo $name?></h1>
</body>
</html>
Desenvolvimento de Aplicativos Web - COLTEC/MG
João Eduardo Montandon
Desenvolvimento de Aplicativos Web - COLTEC/MG
Estruturas de Controle: Estruturas que permitem "controlar" o comportamento de execução de determinados trechos do código.
Principais Estruturas:
Assim como as demais linguagens, PHP possui as seguintes estruturas condicionais:
if() {...}
else {...}
elseif() {...}
switch() {...}
if
if (expressao) {
} else {
}
$login = $_GET["login"];
if ($login == "admin") {
echo "UNLIMITED POWEEERRRR";
} else {
echo "Hello, citzen";
}
elseif
if (expressao) {
} elseif(expressao) {
} else {
}
$login = $_GET["login"];
if ($login == "admin") {
echo "UNLIMITED POWEEERRRR";
} elseif($login == "boss") {
echo "Hello, boss";
} else {
echo "Access denied";
}
switch
Assim como JavaScript, é possível fazer switch de qualquer valor primitivo (números, strings, caracteres, etc.).
switch (n) {
case label1:
break;
case label2:
break;
// ...
default:
}
$favcolor = $_GET["color"];
switch ($favcolor) {
case "red":
echo "VERMELHO!";
break;
case "blue":
echo "AZUL!";
break;
default:
echo "...";
}
Suporte as principais estruturas de repetição:
while (condicao) {...}
do {...} while(condicao);
for(exp; exp; exp) {...}
foreach($var as $col) {...}
while
$password = $_GET['passwd'];
while($password != $adminPassword) {
echo "Senha inválida, tente novamente";
}
do-while
$numero = 1;
do {
echo "o valor atual de número é $numero <br>";
$numero++;
} while($numero < 100);
for
for($cont = 0; $cont < 10; $cont++) {
echo "A variável \$cont vale $cont";
echo "<br>"
}
foreach
O PHP fornece um comando de repetição que iterage sobre todos os elementos de uma coleção (vetor).
foreach($nome_vetor as $elemento) {
<comandos>
}
foreach($nome_vetor as $chave => $valor) {
<comandos>
}
foreach
$elementos = array (1, 2, 3, 4, 5);
foreach($elementos as $elemento) {
echo "O valor atual é $elemento";
echo "<br>";
}
$endereco = array ("rua" => "Malva",
"numero" => 192, "apto" => 210);
foreach($endereco as $chave => $valor) {
echo "\$endereco[$chave] = $valor";
echo "<br>";
}
Desenvolvimento de Aplicativos Web - COLTEC/MG
João Eduardo Montandon
Desenvolvimento de Aplicativos Web - COLTEC/MG
Funções são trechos de código que processam tarefas rotineiras.
Exemplos: Validar CPF, transformar string em caixa alta, etc.
function nome_funcao(arg1, arg2, arg3, ... argN) {
comandos
[ return < expressao > ]
}
<?php
function soma_valores($v1, $v2, $v3) {
$soma = $v1 + $v2 + $v3;
echo "$v1 + $v2 + $v3 = $soma";
}
soma_valores(10, 20, 30);
?>
return
Toda vez que quisermos retornar um valor da função, utilizamos o comando return
.
Da mesma forma que acontece em JavaScript, não precisamos especificar o tipo de retorno da função. Basta utilizar o return
para retornar o valor.
return
function valida_nome($palavra) {
if(ctype_alpha($palavra))
return strtoupper($palavra);
else
return NULL;
}
$nome = valida_nome("PedroHenrique");
echo "$nome";
PHP suporta passagem por valor e referência. Por padrão, a passagem é feita por valor.
Se quiser passar por referência, devemos passar a referência da variável (&).
function dobro($valor) {
$valor = $valor * 2;
}
function duplica(&$valor) {
$valor = $valor * 2;
}
$valor = 5;
dobro($valor);
echo $valor . "<br>";
duplica($valor);
echo $valor;
Recurso que injeta um valor default em um parâmetro, caso ele não seja fornecido.
function nacionalidade($nome, $pais = "Brasil") {
echo "$nome nasceu no(a) $pais";
}
nacionalidade("Henry", "França");
nacionalidade("Ronaldo");
Desenvolvimento de Aplicativos Web - COLTEC/MG
João Eduardo Montandon
Desenvolvimento de Aplicativos Web - COLTEC/MG
Em um sistema web, é muito comum que trechos de código HTML se repitam entre as páginas (menu, cabeçalho, rodapé, etc.).
Problema: Manutenção é custosa (Se o nome de uma opção do menu mudar, esse nome deve mudar em todas as páginas!!)
PHP fornece uma forma de modularizar trechos de código que são comuns entre as páginas.
Desta forma, toda vez que você precisar daquele "pedaço" da página, basta importá-lo.
include
Comando responsável por importar um arquivo dentro de outro.
<?php include "nome_do_arquivo"; ?>
include
<html>
<body>
<? php include "menu.inc"; ?>
<div class="main">
lorem ...
</div>
<? php include "rodape.inc"; ?>
</body>
</html>
Conforme já descrito anteriormente, o comando include
importa o código de um arquivo em outro. Isto também é válido para código PHP!!
Por meio do include, podemos importar trechos de código PHP, tais como funções, objetos, variáveis, etc.
$meses = array(...);
$dia = date ("d", time());
$mes = date ("m", time());
$ano = date ("Y", time());
echo "$dia de " . $meses[$mes-1] .
" de $ano";
Exemplo
<html>
<body>
<h1>Bem vindo</h1>
<h3>
Agora são
<?php include "date.inc"; ?>.
</h3>
</body>
</html>
require
Além do comando include
, o PHP contém outro comando para incluir arquivos: require
Principal Diferença: O include
continua a carregar a página sem o arquivo, enquanto o comando require
apresenta apresenta um erro de compilação se o arquivo não foi encontrado.
require
<html>
<body>
<? php require "funcoes.inc"; ?>
<div class="main">
<? php
if(!cpf_valido(_$GET["cpf"])) {
echo "CPF Inválido!!";
}
?>
</div>
</body>
</html>
Desenvolvimento de Aplicativos Web - COLTEC/MG
João Eduardo Montandon
Desenvolvimento de Aplicativos Web - COLTEC/MG
Os formulários representam um componente fundamental para comunicação entre usuário e aplicação web.
São por meio dos formulários que o usuário tem a oportunidade de enviar dados para o servidor.
<form>
Nome: <input type="text" name="nome"> <br>
Idade: <input type="text" name="idade"> <br>
<input type="submit" name="Enviar">
</form>
Ao se trabalhar com formulários, dois parâmetros precisam ser fornecidos:
<form action="pagina.html" method="post">
Login: <input type="text" name="login"> <br>
Senha: <input type="password" name="senha"> <br>
<input type="submit" name="Log in">
</form>
Para conhecer os campos existentes no formulário, acesse esse link.
A ação de submeter envia os dados do formulário para o servidor, isto é, todos os dados fornecidos pelo usuário nos campos do formulário.
A submissão é realizada por um componente HTML em específico: o input
definido como submit
<!-- Componente que faz a submissão -->
<input type="submit" name="Submit">
Em PHP, os dados enviados pela submissão podem ser recuperados por meio de dois vetores globais:
$_GET[]
: vetor que contém os dados enviados por meio de uma requisição do tipo GET.$_POST[]
: vetor que contém os dados enviados por meio de uma requisição do tipo POST.
$nome = $_GET["login"];
$senha = $_GET["senha"];
$nome = $_POST["login"];
$senha = $_POST["senha"];
<?php $nome = $_POST["nome"]; ?>
<html>
<body>
<h1>Olá, <?php echo "$nome"; ?></h1>
</body>
</html>
Quando um usuário insere um trecho de código que quebra o funcionamento do programa, no intuito de burlar o sistema e obter informações.
Como resolver??
Anulando os caracteres especiais do trecho inserido
<?php
$nome = htmlspecialchars($_POST["nome"]);
?>
<html>
<body>
<h1>Olá, <?php echo "$nome"; ?></h1>
</body>
</html>
O PHP disponibiliza algumas funções para ajudar na verificação dos dados inseridos pelo usuário
Função | Funcionalidade |
empty($str) |
Verifica se string está vazia |
strlen($str) |
Retorna tamanho da string |
strstr($str, $str2) |
Procura pela primeira ocorrência de $str2 |
Desenvolvimento de Aplicativos Web - COLTEC/MG
João Eduardo Montandon
Desenvolvimento de Aplicativos Web - COLTEC/MG
O servidor, por si só, é incapaz de relacionar um identifcador a uma requisição.
Na verdade, isso é uma limitação do modelo do protocolo HTTP.
Em HTTP, as requisições são independentes umas das outras.
Como a conexão não é persistida, o container não reconhece que o cliente que fez a 2a requisição é o mesmo que fez a 1a.
Solução: Manter um espaço no cliente ou servidor que armazene os dados a serem enviados entre as requisições
Nada mais é do que um arquivo texto que é armazenado na máquina do usuário para ser recuperado posteriormente no servidor.
Contém valores formados por pares nome/valor (tuplas).
bool setcookie (string $name, string $value)
$name
Nome do cookie a ser gravado/apagado$value
Valor do cookie a ser gravado.
$login = $_POST["login"];
$password = $_POST["password"];
setcookie("login", $login); // adiciona cookie login
setcookie("password", $password); // adiciona cookie password
...
setcookie("login"); // remove cookie login
setcookie("password"); // remove cookie password
Os cookies podem ser acessados por meio do array $_COOKIE
.
É importante ressaltar que os valores a serem recuperados pelo cookie só estarão disponíveis na requisição seguinte a sua definição.
echo "O login digitado foi" . $_COOKIE['login'];
echo "<br>";
echo "A senha digitada foi" . $_COOKIE['password'];
Permitem armazenar no servidor as informações de determinados usuários.
Consequentemente, o próprio servidor define o tempo de "validade" dessas informações.
Cada sessão tem um identificador único -- denominado session id -- utilizado para identificar qual sessão pertence a qual usuário.
Este identificador é criado no momento em que o usuário acessa a página, e então é transmitido de duas formas:
A Sessão pode ser iniciada por meio do comando session_start
<? php
session_start();
?>
Diferentemente de cookies, é possível armazenar qualquer tipo de valor em uma sessão (inteiros, strings, booleanos, arrays, objetos, etc).
Para registrar uma variável, lidamos diretamente com o array $_SESSION
.
<? php
session_start();
if(!isset($_SESSION["contador"])) {
$_SESSION["contador"] = 1;
} else {
$_SESSION["contador"]++;
}
?>
<? php
session_start();
// ...
// ... processamento ...
// ...
echo $_SESSION["contador"] . " acessos registrados";
?>
Quando não é mais necessário aquela sessão, devemos sempre destruí-la, para evitar que os dados possam ser acessados posteriormente.
<? php
// fazendo logoff do usuário
session_destroy();
?>
Mas e se os cookies estiverem desabilitados? #comofas??
O PHP possui uma constante (denominada SID
) que armazena o session id do usuário.
Desta forma, basta enviar o valor dessa constante na URL da página.
<? php
session_start();
//... processamento ...
echo "<a href='minhaPagina.php?". SID . "'>Clique aqui<a/>";
?>
Desenvolvimento de Aplicativos Web - COLTEC/MG
João Eduardo Montandon
Desenvolvimento de Aplicativos Web - COLTEC/MG
Todo programa é composto por processamento e dados.
Ter uma rotina de armazenamento e recuperação consistente desses dados é fundamental para o "sucesso" de um sistema.
A manipulação de arquivos representa a forma mais simples de persistência de dados em uma aplicação.
Geralmente, os arquivos são separados por "assunto", e então o conteúdo deste arquivo reflete as informações armazenadas sobre o determinado assunto.
O PHP contém uma série de funções que auxiliam o processo de escrita e leitura de arquivos.
fopen
fclose
fread
fgets
fwrite
copy
delete
fclose
feof
file_exists
file_get_contents
file_put_contents
file
fnmatch
is_dir
Para lista completa das funções, acesse este link.
Para abrir um arquivo, utilizamos a função fopen
:
fopen(nome_arquivo, modo);
$arquivo = fopen("/home/test/index.txt", "r");
$arquivo = fopen("public/users.txt", "r+t");
$arquivo = fopen("c:\\Meus Documentos\\Public\\config.bin", "w+b");
$arquivo = fopen("http://www.meusite.com/", "rt");
Para fechar um arquivo, utiliza-se a função fclose
:
fclose(ponteiro_do_arquivo);
<? php
$arquivo = fopen("arquivo.txt", "r+");
/*
... processamento do arquivo...
*/
fclose($arquivo);
?>
fread
Faz a leitura de dados com base em uma quantidade de bytes enviada por parâmetro.
<? php
$arquivo = fopen("teste.txt", "r");
$conteudo = fread($arquivo, 30);
echo "$conteudo";
fclose($arquivo);
?>
fgets
Faz a leitura de uma linha do arquivo.
<? php
$arquivo = fopen("teste.txt", "r");
while(!feof($arquivo)) {
$linha = fgets($arquivo);
echo "$linha <br>";
}
fclose($arquivo);
?>
fwrite
Faz a escrita de dados no arquivo.
<? php
$arquivo = fopen("history.txt", "a");
$user = $_GET["user"];
$date = time();
fwrite($arquivo, "$user -- $date");
fclose($arquivo);
?>
Desenvolvimento de Aplicativos Web - COLTEC/MG
João Eduardo Montandon
Desenvolvimento de Aplicativos Web - COLTEC/MG
Objetos: Forma de representar estruturas mais complexas no programa.
Como represento uma pessoa, carro, ou escola em meu programa?
Todo objeto possui duas características: atributos e ações
Os objetos são descritos por meio de uma classe. Toda classe descreve um conjunto de atributos e métodos.
Os atributos são representados por variáveis
As ações são representadas por métodos.
class nome_classe {
< atributos & métodos >
}
class Pessoa {
var $nome;
var $idade;
function Pessoa($nome, $idade) {
$this->nome = $nome;
$this->idade = $idade;
}
function falar($frase) {
echo $frase;
}
}
$p = new Pessoa("Silvio Santos", 20);
$p->falar("MAH OEEEHHHH!!");
Os atributos devem ser criados por meio da palavra-chave var
,e são acessados dentro dos métodos por meio do termo $this
class classe {
var $nome_variavel;
function f() {
$this->nome_variavel = 75;
}
}
Os métodos são criados da mesma forma que anterior, porém dentro das classes.
class classe {
// atributos ...
function executar() {
// código
}
}
Construtores: métodos especiais que são executados toda vez que uma nova classe é instanciada. Representado pelo método __construct()
.
class classe {
function __construct() {
echo "Chamando o construtor. Instanciação da classe!!";
}
}
Método que é invocado toda vez que a instância de uma classe é destruída. Declara-se um destrutor por meio do método __destruct()
.
class classe {
function __destruct() {
echo "Chamando destrutor. Destruindo objeto!!";
}
}
class BancoDeDados {
var $enderecoDB;
function __construct($enderecoDB) {
$this->enderecoDB = $enderecoDB;
}
function connect() {
echo "Se conectando ao Banco de dados no endereco $this->enderecoDB\n";
}
function __destruct() {
echo "Desconectando do Banco de dados";
}
}
$db = new BancoDeDados("150.164.0.132:5481");
$db->connect();
$db = null;
Visibilidade, herança, interfaces, etc.
Como em outras linguagens, o PHP também permite atribuir níveis de visibilidade a determinados elementos da classe.
Os níveis de visibilidade podem ser atribuídos a atributos, métodos, e definições de classes.
Mais especificamente, o PHP oferece três opções de visibilidade:
private
Restringe a visibilidade do elemento apenas a classe na qual ele foi criadoprotected
Elemento visível para classe e subclassespublic
Elemento visível publicamente (default)
class Pessoa {
private var $nome;
private var $idade;
protected function imprimeRelatorio() {
//...
}
public function imprimePessoa() {
//...
}
}
O mecanismo de herança é uma das peças fundamentais para a POO.
A herança permite o uso de polimorfismo nas linguagens de programação.
Similar ao Java, o PHP pode estender três "tipos" de classes:
class Classe1 {
public function bomDia() {
echo "Bom dia!! <br>";
}
}
class Classe2 extends Classe1 {
public function bomDia() {
Classe1::bomDia();
echo "Olá!!<br>";
}
}
Ao se anotar uma classe como abstrata, a linguagem permite que o programador apenas declare certos métodos, deixando para as subclasses implementarem sua funcionalidade.
Classes abstratas não podem ser instanciadas diretamente.
abstact class ClasseAbstrata {
abstract public function teste();
}
class Classe extends ClasseAbstrata {
public function teste() {
echo "Método teste() chamado!! <br>";
}
}
Interface: contrato que define tudo o que uma classe deve fazer se quiser herdar as características daquele grupo.
Program to an 'interface', not an 'implementation'.
interface MinhaInterface {
function teste();
}
class Classe implements MinhaInterface {
function teste() {
//...
}
}
final
final
Palavra chave que bloqueia a modificação/extensão de métodos e classes
final
- Exemplo
class Classe {
public final metodo() {/* ... */}
}
class Classe2 extends Classe {
public metodo() {/* ERRO!! */}
}
final class Classe {
public metodo() { /* ... */ }
}
/* ERRO!! */
class Classe2 extends Classe { }
NIEDERAUER, J.; Desenvolvendo Websites com PHP; 2a Edição, 2011; Novatec