serversidephp pptx2-120418140114-phpapp01
TRANSCRIPT
RoteiroLinguagens e framework
PHP e um simples MVC
A linguagem PHP
PHP + MySQL
PHP + MySQL + MVC
PHP + MySQL + MVC + AJAXControle de sessão e cookies
Linguagens são compostas por sintaxe, semântica e pragmática. Em computação ele deve ser universal e implementável.
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)
Linguagens Framework
JAVA J2EE (JSF, STRUTS...)
RUBY ON RAILS
PHP Zend, CakePHP...
C#, Visual Basic ... .NET
Haskell SNAP,Happstack
Django, ZopePython
Perl Catalyst
CppCMSC++
Frameworks
● Disciplina● Simplificação● Agilidade / Rapidez ● Padrões de desenvolvimento / Design
Pattern● Organização● Menos código● Conjunto de utilitários
Frameworks
● Disciplina● Simplificação● Agilidade / Rapidez ● Padrões de desenvolvimento / Design
Pattern● Organização● Menos código● Conjunto de utilitários
Similar as metodologias de engenharia de software, se ficar muito “burocratico”, pode tornar lento o processo. Isso será mais perceptível em pequenos projetos
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 ?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++ ....
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
Tiobe index não representa a realidade, nenhum indicador na verdade é capaz disso. Ele apenas é um indicador que pode mostrar uma “tendência”.
O “mundo” é mais que java e php, ☺
Java era “modismo” ?
"Ninguém" queria usar PHP, observa que isso era em 2002, 10 anos atrás.
Mantenham a cabeça aberta, livrem-se de seus preconceitos
Prendam se a conceitos, não a linguagens e frameworks
Mantenham a cabeça aberta, livrem-se de seus preconceitos
Prendam se a conceitos, não a linguagens e frameworks
Aprender novas linguagens é uma boa forma de treinar e se prepararem para aprender.
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.
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 ?>
<!DOCTYPE html><html><head><meta charset="utf-8" /><title></title></head><body> <p> <?= "Ola Mundo" ?> </p></body></html>
PHP expression block: good way
Formato: <?= expression ?>
ola.php
PHP Frameworks MVC Objeto relacional Testes
PHPUnitCakePHP
Zend
Simphony2
CakePHP
PROPELDoctrine
Code igneter
lime
Antes de vermos detalhes da LINGUAGEM, veremos um exemplo simples de um MVC sem o auxilio de frameworks.
Baixem o arquivo.
Model View Controler
Simplificado, pressuposto -> cliente através da Web.
Exemplo usado de: http://php-html.net/tutorials/model-view-controller-in-php/
<?php include_once("controller/Controller.php");
$controller = new Controller();$controller->invoke();
?>
Index.php
class Controller {public $model;public function __construct() {
$this->model = new 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';
}else{
// show the requested book$book = $this->model->getBook($_GET['book']);include 'view/viewbook.php';
}}
}
controller.php
MODEL
View 1
View 2
class Book {public $title;public $author;public $description;public function __construct($title, $author, $description) {
$this->title = $title; $this->author = $author; $this->description = $description;
} }
book.php
class Model {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){
$allBooks = $this->getBookList();return $allBooks[$title];
}
}
Simulando um banco
Simulando um “select”
model.php
….<tr><td>Title</td><td>Author</td><td>Description</td></tr><?php foreach ($books as $title => $book) { ?><tr><td><a href="index.php?book=<?=$book->title?>"><?=$book->title?></a></td>
<td><?=$book->author?></td><td><?=$book->description?></td>
</tr><?php } ?>….
booklist.php
<html><head></head><body><p> Title: <?= $book->title ?> </p><p> Author: <?= $book->author ?> </p><p> Description: <?= $book->description ?> </p></body></html>
viewbook.php Baixem e experimente estes códigos.
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.
<?php$var = 'Bob';$Var = 'Joe'; // case sensitive, $var e diferente de $Varecho "$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
?>
Variáveis e atribuição
<?phpdefine("CONSTANTE", "Alô Mundo.");define("SALARIOMINIMO", 1000);define("DIRETORIOHOME", "/home");
?>
ConstanteConstantes 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
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?>
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;
?>
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.
<?phpecho 'isto é uma string comum';echo 'Você pode incluir novas linhas em strings, dessa
maneira que estarátudo bem';?>
ArrayUm array no PHP é um mapa ordenado. Um mapa é um tipo que relaciona valores para chaves.
<?php$arr = array("foo" => "bar", 12 => true);echo $arr["foo"]; // barecho $arr[12]; // 1
?>
array( chave => valor , ... )// chave pode ser tanto string ou um integer// valor pode ser qualquer coisa
Objeto
Um Objeto pode ser criado com o construtor de linguagem new
<?phpclass foo{ function do_foo() { echo "Doing foo."; }} $bar = new foo;$bar->do_foo();?>
Objeto
Um Objeto pode ser criado com o construtor de linguagem new
<?phpclass foo{ function do_foo() { echo "Doing foo."; }} $bar = new foo;$bar->do_foo();?>
Veremos sobre classes em PHP mais a frente
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");
?>
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().
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)
Recebendo dados de uma requisiçãoPara 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
?>
Respondendo uma requisiçãoUma 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;
?>
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 aritméticos
Operadores Descrição+ Adição- Subtração* Multiplicação/ Divisão% Módulo (resto da divisão)
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.
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
Operadores lógicos
<?phpif ($a > $b) { echo "a is bigger than b";} elseif ($a == $b) { echo "a is equal to b";} else { echo "a is smaller than b";}?>
$i = 1;while ($i <= 10) { echo $i++;}
for ($i = 1; $i <= 10; $i++) { echo $i;}
foreach ($arr as $key => $value) { echo "Key: $key; Value: $value<br />\n";}
switch ($i) { case 0: echo "i equals 0"; case 1: echo "i equals 1"; case 2: echo "i equals 2";}
Controle de fluxo
Seleção Iteração
“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.
# 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();
Estilo orientado a objeto
class ClassName { # atributos da classepublic $name; # atributos públicosprivate $name; # atributos privados# construtor da classepublic function __construct(parameters) {
statement(s);} # métodos – comportamento de cada objetopublic function name(parameters) {
statements;}
}
Sintaxe para declaração de classe
class ClassName { # atributos da classepublic $name; # atributos públicosprivate $name; # atributos privados# construtor da classepublic function __construct(parameters) {
statement(s);} # métodos – comportamento de cada objetopublic function name(parameters) {
statements;}
}
Sintaxe para declaração de classe
<?php class Point {
public $x;public $y;# equivalent of a Java constructorpublic 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 methodpublic function __toString() {
return "(" . $this->x . ", " . $this->y . ")";}
}$p1 = new Point (2,4);echo $p1;
?>
Exemplo
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);
Herança
interface InterfaceName { public function name(parameters);public function name(parameters); ...
} class ClassName implements InterfaceName{ ...
abstract class ClassName { abstract public function name(parameters); ...
}
Interface
Classe abstrata
interface InterfaceName { public function name(parameters);public function name(parameters); ...
} class ClassName implements InterfaceName{ ...
abstract class ClassName { abstract public function name(parameters); ...
}
Interface
Classe abstrata
Possui similaridades, porem classes abstratas podem possuir atribtutos e construtores. Ambas nao são instanciaveis
Integrando com o banco de dados
PHP + MySQL
Baixem o arquivo.
MySQL
Criem um banco chamado "bib", com uma tabela chamada "books", com três atributos (title, author and description)
<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>
Acessando MySQLbook.php
Voltando ao simples MVC ....
Só mudaremos o Model.php, o restante se mantêm
PHP + MVC + MySQL
Baixem o arquivo.
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;
}
Usando o MySQL Incluir um construtor, que inicializa um objeto para conexao com o banco
Array de objetos é montado a partir do resultado da consulta ao banco.
PHP + MVC + MySQL + AJAX
Baixem o arquivo.
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.
PHP + MVC + MySQL + AJAX
<?phprequire_once("../model/Model.php");$model = new Model();$book = $model->getBook($_REQUEST['book']);echo (json_encode ($book));
?>
Incluimos um script, "bookdetail.php", que será responsável por receber a solicitação e encaminhar a resposta.
requisição o titulo do livroresposta JSON
$(".title").click( function () {$.getJSON(
"view/bookdetails.php", {book:$.trim($(this).text())},
function (response) { var $book_detail = $("<div/>") $.each (response, function (i, item) { $("<p/>",{
text: (i + " : " + item)}).appendTo($book_detail) ;
}); // each $("#viewbook").html($book_detail) }) })
})
PHP + MVC + MySQL + AJAX
Requisição com parametros
Resposta, de JSON já convertida para objeto JavaScript
Associado ao click do texto
Controle de Sessão
Baixem o arquivo
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
Variáveis de sessão
<?phpsession_start();$_SESSION['nome'] = "sergio";echo $_SESSION['nome'];
?>
sessao1.php
Crio uma variavel de sessão
sempre deverá ser chamada para tratar as variaveis de sessões
Variáveis de sessão: Criando e acessando
<?phpsession_start();$_SESSION['nome'] = "sergio";echo $_SESSION['nome'];
?>
<?phpsession_start();echo $_SESSION['nome'];
?>
sessao1.php
sessao2.php
sempre deverá ser chamada para tratar as variaveis de sessões
acessando uma variável criada em outro contexto
Nos exemplo, em sessao.zip, encontraram um exemplo simples, de uso de sessão para validar um login.
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.
Cookies
<?phpsetcookie ("nome", "sergio");echo "te mandei um cookie (nome, sergio)"
?>
Em um dado contexto, um cookie pode ser enviado.
Cookies
<?phpsetcookie ("nome", "sergio");echo "te mandei um cookie (nome, sergio)"
?>
Em um dado contexto, um cookie pode ser enviado.
<?phpecho $_COOKIE['nome']." voce por aqui :)";
?>
Acessado em outro contexto.
Cookies
<?php$expire=time()+60*60*24*30;setcookie("user", "Alex Porter", $expire);
?>
O cookie pode ter um tempo pre-definido para expirar, um mês neste exemplo.
PHP deve ser considerada em projetos de aplicações Web, principalmente em pequenos projetos e em protótipos.
Conclusão
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 ....
A agilidade do PHP, é o fato dela ser uma linguagem interpretada, tornando o processo de "implantação" muito mais fácil.
PHP é uma linguagem leve, ágil, muito utilizada na web, e com muitos recursos que permite desenvolver software de qualidade.
Contudo, mesmo em grandes projetos PHP continua sendo usado, por exemplo, Facebook.