O documento discute o uso de PHP, MVC, MySQL e AJAX no desenvolvimento de aplicações web do lado servidor. Aborda brevemente o PHP e o padrão MVC, além de tratar da integração de PHP, MySQL, MVC e AJAX.
Roteiro
Linguagens e framework
PHP e um simples MVC
A linguagem PHP
PHP + MySQL
PHP + MySQL + MVC
PHP + MySQL + MVC + AJAX
Controle de sessão e cookies
3.
Linguagens são compostaspor sintaxe,
semântica e pragmática. Em computação
ele deve ser universal e implementável.
4.
Linguagens são compostaspor sintaxe,
semântica e pragmática. Em computação
ele deve ser universal e implementável.
Framework é um conjunto de objetos que
colaboram com o objetivo de atender um
conjunto de responsabilidades para uma
aplicação específica ou um domínio de aplicação
(Erick Gamma, 1995)
Frameworks
● Disciplina
● Simplificação
● Agilidade / Rapidez
● Padrões de desenvolvimento / Design
Pattern
● Organização
● Menos código
● Conjunto de utilitários
7.
Frameworks
Similar as metodologias de
● Disciplina engenharia de software, se
ficar muito “burocratico”,
● Simplificação pode tornar lento o
● Agilidade / Rapidez processo. Isso será mais
perceptível em pequenos
● Padrões de desenvolvimento / Design
projetos
Pattern
● Organização
● Menos código
● Conjunto de utilitários
8.
Frameworks nos “ensinam”a boa prática de
desenvolvimento
Framework é muito mais que uma biblioteca,
é o resultado da experiência de varias
profissionais, concretizada em um software.
Esta experiência é descrita através dos
padrões de projetos, que nos ENSINOU a
desenvolver. Porem usar padrões requere
experiência, os frameworks nos ajudam
nisso.
Qual melhor ?
Emmuitos casos, escolhemos uma tecnologia pela
tendência e não por critérios quantitativos.
Não existe a melhor.
Grandes empresas usam muito mais que uma
tecnologia, usualmente se baseiam em soluções
hibridas, java, php, c++ ....
11.
PHP é atecnologia base:
Wikipedia
Facebook
Yahoo IBM
Apple Nasa
Java != PHP
São duas tecnologias bem distintas.
●
Java vai muito além do que se propõe o PHP.
●
Java pode substituir o PHP, o contrário não é
●
possível
14.
Tiobe index nãorepresenta a realidade,
nenhum indicador na verdade é capaz
disso. Ele apenas é um indicador que
pode mostrar uma “tendência”.
17.
Java era “modismo”? O “mundo”
é mais que
java e php,
☺
"Ninguém"
queria usar
PHP,
observa
que isso
era em
2002, 10
anos atrás.
Mantenham a cabeçaaberta, livrem-se de seus
preconceitos
Prendam se a conceitos, não a linguagens e
frameworks
20.
Mantenham a cabeçaaberta, livrem-se de seus
preconceitos
Aprender
novas
linguagens é
uma boa
forma de
treinar e se
prepararem
para
aprender.
Prendam se a conceitos, não a linguagens e
frameworks
PHP (um acrônimorecursivo para PHP: Hypertext
Preprocessor) é uma linguagem de script open source de
uso geral, muito utilizada e especialmente guarnecida para o
desenvolvimento de aplicações Web embútivel dentro do
HTML.
24.
PHP (um acrônimorecursivo para PHP: Hypertext
Preprocessor) é uma linguagem de script open source de
uso geral, muito utilizada e especialmente guarnecida para o
desenvolvimento de aplicações Web embútivel dentro do
HTML.
O código PHP é delimitado pelas tags
<?php
....
?>
Ou
<?= expressao ?>
controller.php
class Controller {
public $model;
public function __construct() {
$this->model = new Model(); MODEL
}
public function invoke() {
if (!isset($_GET['book'])) {
// no special book is requested, we'll show a list of all available
books
$books = $this->model->getBookList();
include 'view/booklist.php'; View 1
}
else{
// show the requested book
$book = $this->model->getBook($_GET['book']);
include 'view/viewbook.php';
} View 2
}
}
32.
book.php
class Book {
public $title;
public $author;
public $description;
public function __construct($title, $author, $description) {
$this->title = $title;
$this->author = $author;
$this->description = $description;
}
}
33.
model.php
Simulando um
class Model { banco
public function getBookList()
{
return array(
"Jungle Book" => new Book("Jungle Book", "R. Kipling", "A classic
book."),
"Moonwalker" => new Book("Moonwalker", "J. Walker", ""),
"PHP for Dummies" => new Book("PHP for Dummies", "Some
Smart Guy", "")
);
}
public function getBook($title)
{ Simulando um
$allBooks = $this->getBookList(); “select”
return $allBooks[$title];
}
}
Imperativa
Dinâmica
Orientada a objeto
Estilo funcional
37.
Variáveis
As variáveis noPHP são representadas por um cifrão
($) seguido pelo nome da variável. Os nomes de
variável no PHP fazem distinção entre maiúsculas e
minúsculas.
Um nome de variável válido se inicia com uma letra ou
sublinhado, seguido de qualquer número de letras,
algarismos ou sublinhados.
38.
Variáveis e atribuição
<?php
$var = 'Bob';
$Var = 'Joe'; // case sensitive, $var e diferente de $Var
echo "$var, $Var"; // exibe "Bob, Joe"
$4site = 'not yet'; // inválido; começa com um número
$_4site = 'not yet'; // válido; começa com um sublinhado
$täyte = 'mansikka'; // válido; 'ä' é um caracter ASCII
(extendido) 228
$var = 10; // dinamico
$var += 5; // soma o valor de $var a 5 e atribui a $var
$var /= 2; // divide o valor de $var por 2 e atribui a $var
?>
39.
Constante
Constantes são valoresque são declarados e não podem
ser alterados durante a sua execução. Para definir uma
constante utilizamos a função define
<?php
define("CONSTANTE", "Alô Mundo.");
define("SALARIOMINIMO", 1000);
define("DIRETORIOHOME", "/home");
?>
Booleanos
Este é otipo mais simples. Um booleano expressa
um valor verdade. Ele pode ser TRUE ou FALSE.
Para especificar um literal booleano, use as
palavras-chave TRUE ou FALSE. Ambas são
case-insensitive.
<?php
$variavel = True; // atribui o valor True para
$variavel
?>
42.
Ponto flutuante
Números deponto flutuante (também conhecidos como
"floats", "doubles" ou "números reais") podem ser
especificados utilizando qualquer uma das seguintes
sintaxes:
<?php
$a = 1.234;
$b = 1.2e3;
$c = 7E-10;
?>
43.
String
Uma string éuma série de caracteres.
PHP não impõe limite de tamanho de uma
string; o único limite é o de memória disponível
do computador no qual o PHP está sendo
executado.
<?php
echo 'isto é uma string comum';
echo 'Você pode incluir novas linhas em strings, dessa
maneira que estará
tudo bem';
?>
44.
Array
Um array noPHP é um mapa ordenado.
Um mapa é um tipo que relaciona valores para chaves.
array( chave => valor
, ...
)
// chave pode ser tanto string ou um integer
// valor pode ser qualquer coisa
<?php
$arr = array("foo" => "bar", 12 => true);
echo $arr["foo"]; // bar
echo $arr[12]; // 1
?>
45.
Objeto
Um Objeto podeser criado com o construtor de
linguagem new
<?php
class foo
{
function do_foo() {
echo "Doing foo.";
}
}
$bar = new foo;
$bar->do_foo();
?>
46.
Objeto Veremos sobre
classes em
PHP mais a
Um Objeto pode ser criado com o construtor de
frente
linguagem new
<?php
class foo
{
function do_foo() {
echo "Doing foo.";
}
}
$bar = new foo;
$bar->do_foo();
?>
47.
Resources
Um recurso éuma variável especial, que mantém
uma referência a um recurso externo.
Recursos são criados e usados por funções
especiais.
<?php
$result = mysql_connect("localhost", "username", "pass");
?>
48.
Null
Valor especial NULLrepresenta que a variável não
tem valor. NULL é o único valor possível do tipo
NULL.
A variável é considerada null se:
1. ela foi assimilada com a constante NULL.
2. ela não recebeu nenhum valor ainda.
3. ela foi apagada com unset().
49.
Type casting
A conversãode tipos no PHP funciona como no C: o
nome de um tipo desejado é escrito entre parênteses
antes da variável em que se deseja a moldagem.
(int), (integer) - molde para inteiro
(bool), (boolean) - converte para booleano
(float), (double), (real) - converte para número de
ponto flutuante
(string) - converte para string
(array) - converte para array
(object) - converte para objeto
(unset) - converte para NULL (PHP 5)
50.
Recebendo dados deuma
requisição
Para receber os dados de uma requisição, usamos
variáveis pré-definidas pelo PHP ($_POST ou
$_GET), conforme o método de envio utilizado no
formulário.
<?php
//neste caso temos no formulário um campo chamado nome e
método de envio POST
$nome = $_POST['nome'];
//neste caso temos no formulário um campo chamado nome e
método de envio GET
$nome = $_GET['nome'];
$nome = $_REQUEST['nome']; // contem ambos
?>
51.
Respondendo uma
requisição
Uma respostado servidor será em geral um texto,
estruturado no formato HTML, XML, JSON, texto puro
e etc
<?php
$nome = $_REQUEST['nome'];
echo "respondendo ao ". $nome;
?>
52.
Operadores unários
Operadores Descrição
++$a Pré-incremento. Incrementa $a em um e, então, retorna
$a;
$a++ Pós-incremento. Retorna $a e, então, incrementa $a em
um.
--$a Pré-decremento. Decrementa $a em um e, então,
retorna $a;
$a-- Pós-incremento. Retorna $a e, então, decrementa $a
em um.
Operadores relacionais
Operadores Descrição
== Igual. Resulta verdadeiro (TRUE) se expressões forem
iguais
=== Idêntico. Resulta verdadeiro (TRUE) se as expressões
forem iguais e do mesmo tipo de dados.
!= ou <> Diferente. Resulta verdadeiro se as variáveis forem
diferentes.
< Menor que.
> Maior que.
<= Menor ou igual.
>= Maior ou igual.
55.
Operadores lógicos
Operadores Descrição
($a and $b) E: Verdadeiro (TRUE) se tanto $a quanto $b forem
verdadeiros
($a or $b) OU: Verdadeiro (TRUE) se $a ou $b forem verdadeiros
($a xor $b) XOR: Verdadeiro (TRUE) se $a ou $b forem verdadeiros, de
forma exclusiva.
(! $a) NOT: Verdadeiro (TRUE) se $a for false.
($a && $b) E: Verdadeiro (TRUE) se tanto $a quanto $b forem
verdadeiros
($a || $b) OU: Verdadeiro (TRUE) se $a ou $b forem verdadeiros
56.
Controle de fluxo
Seleção Iteração
<?php $i = 1;
if ($a > $b) { while ($i <= 10) {
echo "a is bigger than b"; echo $i++;
} elseif ($a == $b) { }
echo "a is equal to b";
} else {
echo "a is smaller than b"; for ($i = 1; $i <= 10; $i++) {
} echo $i;
?> }
switch ($i) {
case 0: foreach ($arr as $key => $value) {
echo "i equals 0"; echo "Key: $key; Value: $value<br />n";
case 1: }
echo "i equals 1";
case 2:
echo "i equals 2";
}
57.
“Incluindo” arquivos
Include, incluie avalia o arquivo informado. Se o
arquivo não existir produzirá uma mensagem de
advertência (warning).
include_once, garante que será avaliado apenas
uma vês.
require, similar ao include, porem produz uma
mensagem de Fatal Error caso o arquivo não exista.
require_once, garante que será avaliado apenas
uma vês.
Estilo orientado aobjeto
# construi um objeto
$name = new ClassName(parameters);
# acessando um atribtuo
$name->fieldName
# chamando um método
$name->methodName(parameters);
$zip = new ZipArchive();
$zip->open("moviefiles.zip");
$zip->extractTo("images/");
$zip->close();
60.
Sintaxe para declaraçãode classe
class ClassName {
# atributos da classe
public $name; # atributos públicos
private $name; # atributos privados
# construtor da classe
public function __construct(parameters) {
statement(s);
}
# métodos – comportamento de cada objeto
public function name(parameters) {
statements;
}
}
61.
Sintaxe para declaraçãode classe
class ClassName {
# atributos da classe
public $name; # atributos públicos
private $name; # atributos privados
# construtor da classe
public function __construct(parameters) {
statement(s);
}
# métodos – comportamento de cada objeto
public function name(parameters) {
statements;
}
}
62.
Exemplo
<?php
class Point {
public $x;
public $y;
# equivalent of a Java constructor
public function __construct($x, $y) {
$this->x = $x; $this->y = $y;
}
public function distance($p) {
$dx = $this->x - $p->x;
$dy = $this->y - $p->y;
return sqrt($dx * $dx + $dy * $dy);
}
# equivalent of Java's toString method
public function __toString() {
return "(" . $this->x . ", " . $this->y . ")";
}
}
$p1 = new Point (2,4);
echo $p1;
?>
63.
Herança
class ClassName extendsClassName {
...
}
class Point3D extends Point {
public $z;
public function __construct($x, $y, $z) {
parent::__construct($x, $y);
$this->z = $z;
}
}
$p2 = new Point3D (4,5,6);
64.
Interface
interface InterfaceName {
public function name(parameters);
public function name(parameters); ...
}
class ClassName implements InterfaceName{ ...
Classe abstrata
abstract class ClassName {
abstract public function name(parameters);
...
}
65.
Interface Possui similaridades,
porem classes
interface InterfaceName { abstratas podem
public function name(parameters); atribtutos e
possuir
public function name(parameters); ... Ambas
construtores.
} nao são instanciaveis
class ClassName implements InterfaceName{ ...
Classe abstrata
abstract class ClassName {
abstract public function name(parameters);
...
}
MySQL
Criem um bancochamado "bib", com uma
tabela chamada "books", com três
atributos (title, author and description)
68.
Acessando MySQL book.php
<body>
<p> livros </p>
<table>
<?php
$mysqli = new mysqli("localhost", "root", "", "bib");
$result = $mysqli->query("SELECT * FROM books");
while ($row = $result->fetch_object()) { ?>
<tr>
<td><?=$row->title ?></td>
<td><?=$row->author ?></td>
<td><?=$row->description ?></td>
<?php } ?>
</ul>
</body>
69.
PHP + MVC+ MySQL
Voltando ao simples MVC ....
Só mudaremos o Model.php,
o restante se mantêm
Baixem o arquivo.
70.
Incluir um
Usando oMySQL construtor, que
inicializa um objeto
para conexao com o
banco
public function __construct(){
$this->mysqli = new mysqli("localhost", "root", "", "bib");
}
public function getBookList(){
$result = $this->mysqli->query("SELECT * FROM books");
$result_array ;
while ($row = $result->fetch_object()) {
$result_array[$row->title] =
new Book ($row->title, $row->author, $row->description);
}
return $result_array;
}
Array de objetos é montado a
partir do resultado da
consulta ao banco.
PHP + MVC+ MySQL + AJAX
Usando o mesmo banco e projeto, podemos usar
apenas uma view. Ao clicar em um livro, fazemos uma
requisição, que retornará o objeto no formato JSON.
O conteúdo irá variar de acordo
com a seleção.
73.
PHP + MVC+ MySQL + AJAX
Incluimos um script, "bookdetail.php", que será
responsável por receber a solicitação e encaminhar a
resposta.
<?php
require_once("../model/Model.php");
$model = new Model();
$book = $model->getBook($_REQUEST['book']);
echo (json_encode ($book));
?>
requisição o titulo
resposta JSON do livro
74.
PHP + MVC+ MySQL + AJAX
Associado ao
click do texto
$(".title").click( function () {
$.getJSON(
Requisição com
"view/bookdetails.php",
parametros
{book:$.trim($(this).text())},
function (response) {
var $book_detail = $("<div/>") Resposta, de
$.each (response, function (i, item) { JSON já
convertida para
$("<p/>",{
objeto JavaScript
text: (i + " : " + item)
}).appendTo($book_detail) ;
}); // each
$("#viewbook").html($book_detail)
})
})
})
Controle de Sessão
Suportea sessões no PHP consiste de uma maneira
de presevar dados através de acessos subsequentes.
Isso permite a criação de aplicações mais
personalizadas e aumenta o apelo do seu web site.
Variáveis de sessão
77.
sempre deverá serchamada
para tratar as variaveis de
Variáveis de sessão sessões
sessao1.php
<?php
session_start(); Crio uma
$_SESSION['nome'] = "sergio"; variavel de
echo $_SESSION['nome']; sessão
?>
78.
Variáveis de sessão:Criando e acessando
sessao1.php
<?php
session_start();
$_SESSION['nome'] = "sergio";
echo $_SESSION['nome'];
?> sempre deverá ser
chamada para tratar as
variaveis de sessões
sessao2.php
<?php
acessando uma
session_start(); variável criada
echo $_SESSION['nome']; em outro
?> contexto
Nos exemplo, emsessao.zip,
encontraram um exemplo simples, de
uso de sessão para validar um login.
81.
Cookies
Cookie, são dadosno fomato (chave, valor) que podem ser
enviado para o cliente e que serão transmitidos entre todas
as futuras conexões, enquanto ele existir.
82.
Cookies Em um dado contexto, um
cookie pode ser enviado.
<?php
setcookie ("nome", "sergio");
echo "te mandei um cookie (nome, sergio)"
?>
83.
Cookies Em um dado contexto, um
cookie pode ser enviado.
<?php
setcookie ("nome", "sergio");
echo "te mandei um cookie (nome, sergio)"
?>
<?php
echo $_COOKIE['nome']." voce por aqui :)";
?>
Acessado em outro contexto.
84.
Cookies O cookie pode ter um tempo pre-
definido para expirar, um mês neste
exemplo.
<?php
$expire=time()+60*60*24*30;
setcookie("user", "Alex Porter", $expire);
?>
85.
Conclusão
PHP éuma linguagem leve, ágil, muito utilizada na web, e com muitos
recursos que permite desenvolver software de qualidade.
A agilidade do PHP, é o fato dela ser uma linguagem interpretada,
tornando o processo de "implantação" muito mais fácil.
PHP deve ser considerada em projetos de aplicações Web,
principalmente em pequenos projetos e em protótipos.
Contudo, mesmo em grandes projetos PHP continua sendo usado, por
exemplo, Facebook.
Dependendo das necessidades, existem diversos frameworks
completos, para persistência, MVC e testes de unidade. Similarmente
ao Java, possuem um conjunto de regras, arquivos de onfiguração ....