2. 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 compostas por sintaxe,
semântica e pragmática. Em computação
ele deve ser universal e implementável.
4. Linguagens são compostas por 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)
6. 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.
10. Qual melhor ?
Em muitos 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 é a tecnologia base:
Wikipedia
Facebook
Yahoo IBM
Apple Nasa
13. 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ão representa a realidade,
nenhum indicador na verdade é capaz
disso. Ele apenas é um indicador que
pode mostrar uma “tendência”.
15.
16.
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.
19. Mantenham a cabeça aberta, livrem-se de seus
preconceitos
Prendam se a conceitos, não a linguagens e
frameworks
20. Mantenham a cabeça aberta, 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
23. PHP (um acrônimo recursivo 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ônimo recursivo 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 ?>
28. Antes de vermos detalhes da
LINGUAGEM, veremos um exemplo
simples de um MVC sem o auxilio de
frameworks.
Baixem o arquivo.
29. Exemplo usado de: http://php-html.net/tutorials/model-view-controller-in-php/
Model View Controler
Simplificado, pressuposto -> cliente através da
Web.
31. 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];
}
}
36. Imperativa
Dinâmica
Orientada a objeto
Estilo funcional
37. Variáveis
As variáveis no PHP 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 valores que 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");
?>
41. Booleanos
Este é o tipo 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 de ponto 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 no PHP é 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 pode ser 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 NULL representa 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ão de 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 de uma
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 resposta do 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.
54. 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, inclui e 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.
59. Estilo orientado a objeto
# 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ção de 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ção de 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 extends ClassName {
...
}
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);
...
}
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 o MySQL 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.
72. 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)
})
})
})
76. Controle de Sessão
Suporte a 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á ser chamada
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
80. Nos exemplo, em sessao.zip,
encontraram um exemplo simples, de
uso de sessão para validar um login.
81. Cookies
Cookie, são dados no 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 ....