Server Side
PHP, MVC, MySQL E AJAX




Prof: Sérgio Souza Costa
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
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
    Perl                   Catalyst
   C++                     CppCMS
  Python                 Django, Zope
  Haskell              SNAP,Happstack
Frameworks
●   Disciplina
●   Simplificação
●   Agilidade / Rapidez
●   Padrões de desenvolvimento / Design
    Pattern
●   Organização
●   Menos código
●   Conjunto de utilitários
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
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:

               Wikipedia
 Facebook

     Yahoo            IBM

            Apple     Nasa
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”.
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.
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
                                       Aprender
                                       novas
                                       linguagens é
                                       uma boa
                                       forma de
                                       treinar e se
                                       prepararem
                                       para
                                       aprender.




 Prendam se a conceitos, não a linguagens e
 frameworks
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
PHP expression block: good way

Formato: <?= expression ?>


<!DOCTYPE html>
<html>
<head>                           ola.php
<meta charset="utf-8" />
<title></title>
</head>
<body>
   <p> <?= "Ola Mundo" ?> </p>
</body>
</html>
PHP Frameworks
MVC            Objeto relacional   Testes
CakePHP                            PHPUnit
                    CakePHP
                                     lime
Zend                 PROPEL
Simphony2            Doctrine
Code igneter
Antes de vermos detalhes da
 LINGUAGEM, veremos um exemplo
 simples de um MVC sem o auxilio de
 frameworks.

Baixem o arquivo.
Exemplo usado de: http://php-html.net/tutorials/model-view-controller-in-php/



     Model View Controler




   Simplificado, pressuposto -> cliente através da
   Web.
Index.php


<?php
  include_once("controller/Controller.php");
     $controller = new Controller();
     $controller->invoke();
?>
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
    }
}
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;
   }
}
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];
    }


}
booklist.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 } ?>….

                                      Baixem e experimente estes
viewbook.php                          códigos.
<html>
<head></head>
<body>
<p> Title: <?= $book->title ?> </p>
<p> Author: <?= $book->author ?> </p>
<p> Description: <?= $book->description ?> </p>
</body>
</html>
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.
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
?>
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");
   ?>
Valores e tipos

Primitivos   Especiais   Compostos:
boolean      resource    array
integer      NULL        Object
Float
string
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.
<?php
    echo 'isto é uma string comum';
    echo 'Você pode incluir novas linhas em strings, dessa
maneira que estará
tudo bem';
?>
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
 ?>
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();
 ?>
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();
?>
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çã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

?>
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;
?>
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 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
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";
}
“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
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();
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;
    }
}
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;
    }
}
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;
?>
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);
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);
   ...
}
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);
   ...
}
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)
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>
PHP + MVC + MySQL

Voltando ao simples MVC ....

Só mudaremos o Model.php,
o restante se mantêm


Baixem o arquivo.
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.
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
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
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

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
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
?>
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
Variáveis de sessão: Destruindo


<?php
   session_start();
   session_destroy();
?>
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                                Em um dado contexto, um
                                       cookie pode ser enviado.



<?php
   setcookie ("nome", "sergio");
   echo "te mandei um cookie (nome, sergio)"
?>
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.
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);
?>
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 ....

Serversidephp pptx2-120418140114-phpapp01

  • 1.
    Server Side PHP, MVC,MySQL E AJAX Prof: Sérgio Souza Costa
  • 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 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)
  • 5.
    Linguagens Framework JAVA J2EE (JSF, STRUTS...) RUBY ON RAILS PHP Zend, CakePHP... C#, Visual Basic ... .NET Perl Catalyst C++ CppCMS Python Django, Zope Haskell SNAP,Happstack
  • 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.
  • 9.
  • 10.
    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
  • 12.
  • 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ã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.
  • 18.
  • 19.
    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
  • 21.
    PHP Guia rápido http://www.php.net/manual/pt_BR/
  • 22.
  • 23.
    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 ?>
  • 25.
    Imprimir HTML tagsem PHP = bad style
  • 26.
    PHP expression block:good way Formato: <?= expression ?> <!DOCTYPE html> <html> <head> ola.php <meta charset="utf-8" /> <title></title> </head> <body> <p> <?= "Ola Mundo" ?> </p> </body> </html>
  • 27.
    PHP Frameworks MVC Objeto relacional Testes CakePHP PHPUnit CakePHP lime Zend PROPEL Simphony2 Doctrine Code igneter
  • 28.
    Antes de vermosdetalhes 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.
  • 30.
    Index.php <?php include_once("controller/Controller.php"); $controller = new Controller(); $controller->invoke(); ?>
  • 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]; } }
  • 34.
    booklist.php …. <tr><td>Title</td><td>Author</td><td>Description</td></tr> <?php foreach ($booksas $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 } ?>…. Baixem e experimente estes viewbook.php códigos. <html> <head></head> <body> <p> Title: <?= $book->title ?> </p> <p> Author: <?= $book->author ?> </p> <p> Description: <?= $book->description ?> </p> </body> </html>
  • 35.
  • 36.
    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"); ?>
  • 40.
    Valores e tipos Primitivos Especiais Compostos: boolean resource array integer NULL Object Float string
  • 41.
    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.
  • 53.
    Operadores aritméticos Operadores Descrição + Adição - Subtração * Multiplicação / Divisão % Módulo (resto da divisão)
  • 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, 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.
  • 58.
  • 59.
    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); ... }
  • 66.
    Integrando com obanco de dados PHP + MySQL Baixem o arquivo.
  • 67.
    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.
  • 71.
    PHP + MVC+ MySQL + AJAX Baixem o arquivo.
  • 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) }) }) })
  • 75.
  • 76.
    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
  • 79.
    Variáveis de sessão:Destruindo <?php session_start(); session_destroy(); ?>
  • 80.
    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 ....