serversidephp pptx2-120418140114-phpapp01

85
Server Side Prof: Sérgio Souza Costa PHP, MVC, MySQL E AJAX

Upload: joaocarlobarros

Post on 16-Apr-2017

373 views

Category:

Documents


0 download

TRANSCRIPT

Server Side

Prof: Sérgio Souza Costa

PHP, MVC, MySQL E AJAX

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 ?

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++ ....

PHP é a tecnologia base:

Facebook

Yahoo

Wikipedia

Apple Nasa

IBM

Java != PHP

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.

Server side

Client side

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 Guia rápido

http://www.php.net/manual/pt_BR/

Ciclo de vida

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 ?>

Imprimir HTML tags em PHP = bad style

<!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.

PHP - Linguagem

Imperativa

Dinâmica

Orientada a objeto

Estilo funcional

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

Valores e tipos

Primitivos booleanintegerFloat string

Compostos: arrayObject

Especiais resourceNULL

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.

PHP Orientado a objetos

# 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

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

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

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

<?phpsession_start();session_destroy();

?>

Variáveis de sessão: Destruindo

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.