Curso PHP UNIFACS 2014.1 – 2ª aula

54
PHP Básico II

Transcript of Curso PHP UNIFACS 2014.1 – 2ª aula

Page 1: Curso PHP UNIFACS 2014.1 – 2ª aula

PHPBásico  II

Page 2: Curso PHP UNIFACS 2014.1 – 2ª aula

IF / ELSEIF / ELSE<?php!!$a = 60;!$b = 60;!!if ($a == $b) {!! echo '$a e $b são iguais';!} elseif ($a > $b) {!! echo '$a é maior que $b';!} else {!! echo '$a é menor que $b';!}!

Page 3: Curso PHP UNIFACS 2014.1 – 2ª aula

While / Do-While<?php!!/* While */!$i = 1;!while ($i <= 10) {!! echo $i++;!}!!/* Do-While */!$i = 1;!do {!! echo $i++;!} while ($i <= 10);!

Page 4: Curso PHP UNIFACS 2014.1 – 2ª aula

For / Foreach<?php!!

for ($i = 0; $i <= 100; $i++) {!! echo $i . PHP_EOL;!} !!

foreach (range(0, 100) as $numero) {!! echo $numero . PHP_EOL;!}!

Page 5: Curso PHP UNIFACS 2014.1 – 2ª aula

Foreach<?php!!

for ($i = 0; $i <= 100; $i++) {!! echo $i . PHP_EOL;!} !!

foreach (range(0, 100) as $numero) {!! echo $numero . PHP_EOL;!}!

Page 6: Curso PHP UNIFACS 2014.1 – 2ª aula

Foreach<?php!!$clientes[3] = ['nome' => 'John Doe'];!$clientes[2] = ['nome' => 'Steve Jobs'];!$clientes[1] = ['nome' => 'Bill Gates'];!!foreach ($clientes as $chave => $cliente)!! echo "Cliente #{$chave}: {$cliente['nome']}" . PHP_EOL;!!/* Output:!Cliente #3: John Doe!Cliente #2: Steve Jobs!Cliente #1: Bill Gates!*****/!

Page 7: Curso PHP UNIFACS 2014.1 – 2ª aula

Foreach<?php!!$lista = array(50, 60, 70, 80);!!foreach ($lista as $chave => $valor)!! echo "$chave: $valor" . PHP_EOL;!!/* Output:!0: 50!1: 60!2: 70!3: 80!*****/!

Page 8: Curso PHP UNIFACS 2014.1 – 2ª aula

Switch<?php!!$i = 1;!!switch ($i) {!! case 0: !! ! echo 'primeira opção';!! ! break;!! case 1: !! ! echo 'segunda opção';!! ! break;!! case 2:!! ! echo 'terceira opção';!! ! break;!}!

Page 9: Curso PHP UNIFACS 2014.1 – 2ª aula

Include / Requirearquivo01.php!<?php!!$texto = 'Trabalhando com o Include no PHP';!!function dobrar($numero) {!! return $numero * 2;!}!!!arquivo02.php!<?php!!include 'arquivo01.php';!!echo dobrar(4); // Output: 8!echo $texto; // Output: Trabalhando com o Include no PHP!

Page 10: Curso PHP UNIFACS 2014.1 – 2ª aula

Include Exibe  um  “Warning”  e  não  interrompe  a  execução

Warning:  include(arquivo1.php):  failed  to  open  stream:  No  such  file  or  directory  in  /Users/jweber/dev/projects/php/arquivo1.php  on  line  3  !Warning:  include():  Failed  opening  'arquivo1.php'  for  inclusion  (include_path='.:')  in  /Users/jweber/dev/projects/php/arquivo1.php  on  line  3  !Fatal  error:  Call  to  undefined  function  dobrar()  in  /Users/jweber/dev/projects/php/arquivo2.php  on  line  5

Page 11: Curso PHP UNIFACS 2014.1 – 2ª aula

Require Exibe  um  “Fatal  Error”  e  interrompe  a  execução

Warning:  require(arquivo1.php):  failed  to  open  stream:  No  such  file  or  directory  in  /Users/jweber/dev/projects/php/arquivo1.php  on  line  3  !Fatal  error:  require():  Failed  opening  required  'arquivo1.php'  (include_path='.:')  in  /Users/jweber/dev/projects/php/arquivo1.php  on  line  3

Page 12: Curso PHP UNIFACS 2014.1 – 2ª aula

• Pode ser atribuída à uma variável ou invocadas dinamicamente;

• Passadas como argumentos à outras funções;

• Pode retornar outras funções (called higher-order functions);

• Presente na linguagem desde o PHP 5.3 (2009) como Closures;

• Diversas melhorias no PHP 5.4 (2012);

Funções Anônimas no PHP

Page 13: Curso PHP UNIFACS 2014.1 – 2ª aula

13

<?php!!$input = array(1, 2, 3, 4, 5, 6);!!// Criar função anônima!$filtroNumeroPar = function($item) {! return ($item % 2) == 0;!};!!// Função do PHP array_filter!$output = array_filter($input, $filtroNumeroPar);!!// Você pode passar a função direto!$output = array_filter($input, function($item) {! return ($item % 2) == 0;!});!!print_r($output);!

Exemplo 01 Lambda

Page 14: Curso PHP UNIFACS 2014.1 – 2ª aula

14

Exemplo 02 Closure

<?php!/**! * Creates an anonymous filter function accepting items > $min! *! * Returns a single filter out of a family of "greater than n" filters! */!function criteria_greater_than($min)!{! return function($item) use ($min) {! return $item > $min;! };!}!!$input = array(1, 2, 3, 4, 5, 6);!!// Use array_filter on a input with a selected filter function!$output = array_filter($input, criteria_greater_than(3));!!print_r($output); // items > 3!

Page 15: Curso PHP UNIFACS 2014.1 – 2ª aula

15

http://www.php.net/manual/pt_BR/function.array-filter.php

Page 16: Curso PHP UNIFACS 2014.1 – 2ª aula

16

http://php.net/manual/en/function.call-user-func-array.php

Page 17: Curso PHP UNIFACS 2014.1 – 2ª aula

17

https://wiki.php.net/rfc/closuresFunções Anônimas no PHP

Page 18: Curso PHP UNIFACS 2014.1 – 2ª aula

Onde Estudar?www.phptherightway.com

Page 19: Curso PHP UNIFACS 2014.1 – 2ª aula

Onde Estudar?www.php.net/docs.php

Page 20: Curso PHP UNIFACS 2014.1 – 2ª aula

Onde Estudar?www.php.net/docs.php

Page 21: Curso PHP UNIFACS 2014.1 – 2ª aula

Onde Estudar?http://www.codecademy.com/tracks/php

Page 22: Curso PHP UNIFACS 2014.1 – 2ª aula

Onde Estudar?http://www.w3schools.com/html/html_intro.asp

Page 23: Curso PHP UNIFACS 2014.1 – 2ª aula

Onde Estudar?http://www.codecademy.com/tracks/web

Page 24: Curso PHP UNIFACS 2014.1 – 2ª aula

Onde Estudar?http://www.w3c.br/Cursos/CursoHTML5

Page 25: Curso PHP UNIFACS 2014.1 – 2ª aula

25

PHP!Orientado a Objetos

Page 26: Curso PHP UNIFACS 2014.1 – 2ª aula

• PHP é flexível;

• Linguagem dinâmica;

• Suporta uma variedade de técnicas de programação;

• Sólido modelo OO no PHP 5.0 (2004);

• Traits na 5.4 (2012);

Language Highlights

Page 27: Curso PHP UNIFACS 2014.1 – 2ª aula

Classe<?php!!class MinhaClasse!{!!! public ! $atributoPublico ! = 'Público';!! protected $atributoProtegido = 'Protegido';!! private ! $atributoPrivado ! = 'Privado';!!! public function metodoQualquer()!! {!! ! echo $this->atributoPublico;!! ! echo $this->atributoProtegido;!! ! echo $this->atributoPrivado;!! }!!}!!$objeto = new MinhaClasse();!echo $objeto->atributoPublico; // OK!echo $objeto->atributoProtegido; // Fatal Error!echo $objeto->atributoPrivado; // Fatal Error!$objeto->metodoQualquer(); // PúblicoProtegidoPrivado!

Page 28: Curso PHP UNIFACS 2014.1 – 2ª aula

Construtor<?php!!class Pessoa !{!!! private $nome;!! private $sobrenome;!!! public function __construct($nome, $sobrenome)!! {!! ! $this->nome = $nome;!! ! $this->sobrenome = $sobrenome;!! }!!! public function getNomeCompleto() !! {! return $this->nome . ' ' . $this->sobrenome;!! }!!}!!$joao = new Pessoa('João', 'da Silva');!echo $joao->getNomeCompleto(); // João da Silva!

Page 29: Curso PHP UNIFACS 2014.1 – 2ª aula

Destrutor<?php!!class Pessoa!{!!! private $nome, $sobrenome;!!! public function __construct($nome, $sobrenome)!! {!! ! $this->nome = $nome;!! ! $this->sobrenome = $sobrenome;!! }!!! public function __destruct()!! {! echo 'Destruindo...';!! }!! !}!!$joao = new Pessoa('João', 'da Silva');!unset($joao); //Destruindo...!//$joao = null; //Destruindo...!

Page 30: Curso PHP UNIFACS 2014.1 – 2ª aula

Método Estático<?php!!class MinhaClasse!{!!! function metodoNormal()!! {! echo 'Método Normal';!! }!!! static function metodoEstatico()!! {! echo 'Método Estático';!! }!!}!!MinhaClasse::metodoNormal(); // Error!MinhaClasse::metodoEstatico(); // OK!!$objeto = new MinhaClasse();!$objeto->metodoNormal();!$objeto->metodoEstatico();!

Page 31: Curso PHP UNIFACS 2014.1 – 2ª aula

Herança<?php!!class OutraClasse!{!!! public $atributo = 'Atributo Qualquer';!!! public function hello()!! {! echo 'Hello World';!! }!!}!!class MinhaClasse extends OutraClasse!{!!! public function getAtributo()!! {! return $this->atributo;!! }!!}!!$objeto = new MinhaClasse();!$objeto->hello();!echo $objeto->getAtributo();!

Page 32: Curso PHP UNIFACS 2014.1 – 2ª aula

Classe Abstrata<?php!!abstract class OutraClasse!{!!! public $atributo = 'Atributo Qualquer';!!! public function hello()!! {! echo 'Hello World';!! }!!}!!class MinhaClasse extends OutraClasse!{!!! public function getAtributo()!! {! return $this->atributo;!! }!!}!!$objeto2 = new OutraClasse(); // Fatal Error!

Page 33: Curso PHP UNIFACS 2014.1 – 2ª aula

Método Abstrato<?php!!abstract class MinhaClasse!{!! abstract function metodoAbstrato();!!! public function getAtributo()!! {! return $this->atributo;!! }!!}!!$objeto = new MinhaClasse(); // Fatal Error!

Page 34: Curso PHP UNIFACS 2014.1 – 2ª aula

Como utilizar o mesmo nome de classe em uma

outra biblioteca?

Namespaces

Page 35: Curso PHP UNIFACS 2014.1 – 2ª aula

O que é Namespace?

c:\arquivos\pasta01\foo.txt

c:\arquivos\pasta02\foo.txt

Assim, consigo ter arquivos com os mesmos nomes, porém, em

caminhos diferentes.

Page 36: Curso PHP UNIFACS 2014.1 – 2ª aula

36

Namespaces<?php!!namespace Escola\Publica;!!class Estudante!{!!! public $matricula, $nome, $serie;!!! function __construct($matricula, $nome, $serie)!! {!! ! $this->matricula = $matricula;!! ! $this->nome = $nome;!! ! $this->serie = $serie;!! }!!}!

Page 37: Curso PHP UNIFACS 2014.1 – 2ª aula

37

Namespaces<?php!!namespace Escola\Privada;!!class Estudante!{!!! public $matricula, $nome, $serie;!!! function __construct($matricula, $nome, $serie)!! {!! ! $this->matricula = $matricula;!! ! $this->nome = $nome;!! ! $this->serie = $serie;!! }!!}!

Page 38: Curso PHP UNIFACS 2014.1 – 2ª aula

38

Namespaces

<?php!!require 'projeto/src/publica/Estudante.php';!$joao = new \Escola\Publica\Estudante();!!require 'projeto/src/privada/Estudante.php';!$pedro = new \Escola\Privada\Estudante();!

Page 39: Curso PHP UNIFACS 2014.1 – 2ª aula

Namespaces<?php!// PHP 5.3 and later:!namespace Vendor\Model;!!class Foo!{!}!!<?php!// PHP 5.2.x and earlier:!class Vendor_Model_Foo!{!}!

Page 40: Curso PHP UNIFACS 2014.1 – 2ª aula

Namespaces<?php!!require 'projeto/src/publica/Estudante.php';!require 'projeto/src/privada/Estudante.php';!!use \Escola\Publica\Estudante as EstudantePublica();!use \Escola\Privada\Estudante as EstudantePrivada();!!$joao = new EstudantePublica();!$pedro = new EstudantePrivada();!

Page 41: Curso PHP UNIFACS 2014.1 – 2ª aula

Interfaces<?php!!interface NomeDaInterface !{! public function metodo($parametro);!}!!interface NomeDeOutraInterface!{! public function outroMetodo($param1, $param2);!}!!class Qualquer implements NomeDaInterface, NomeDeOutraInterface!{!! !! public function metodo($parametro)!! {! print('Implementação...' . $parametro);!! }!!! public function outroMetodo($param1, $param2) !! {! print('Implementação 2...' . $param1 . $param2);!! }!!}!!$objeto = new Qualquer();!$objeto->metodo('Teste');!

Page 42: Curso PHP UNIFACS 2014.1 – 2ª aula

Constantes<?php!namespace Vendor\Model;!!class Foo!{! const VERSION = '1.0';! const DATE_APPROVED = '2012-06-01';!! public function getVersion()! {! return self::VERSION;! }!}!!echo Foo::VERSION;!

Page 43: Curso PHP UNIFACS 2014.1 – 2ª aula

Traits<?php!!trait Hello!{!! function ola($nome)!! {! echo "Olá, {$nome}!";!! }!}!!class Pessoa!{!! use Hello;!}!!$joao = new Pessoa();!$joao->ola('Maria'); //Olá, Maria!!

Page 44: Curso PHP UNIFACS 2014.1 – 2ª aula

DateTime

<?php!!$input = '12. 30. 2014';!$data = \DateTime::createFromFormat('m. d. Y', $input);!!echo 'Data no Padrão BR: ' . $data->format('d/m/Y');!

Page 45: Curso PHP UNIFACS 2014.1 – 2ª aula

DateTime<?php!!$input = '12. 30. 2014';!$dataInicial = \DateTime::createFromFormat('m. d. Y', $input);!$dataFinal = clone $dataInicial;!!$dataFinal->add(new \DateInterval('P4M23D')); // Adiciona 1 mês e 6 dias!!$diff = $dataFinal->diff($dataInicial);!!print('Diff: ' . $diff->format('%m meses, %d dias (total: %a dias)') . PHP_EOL);!!/* Output:!Diff: 4 meses, 24 dias (total: 144 dias)!**/!

Page 46: Curso PHP UNIFACS 2014.1 – 2ª aula

Autoload Simples

<?php!!function __autoload($classe)!{!! require $classe . '.php'; // require 'Pessoa.php';!}!!$pessoa = new Pessoa();!

Page 47: Curso PHP UNIFACS 2014.1 – 2ª aula

Try / Catch<?php!!function divisao($dividendo, $divisor)!{!! if (0 === $divisor)!! ! throw new \Exception('Divisão por zero!');!!! return $dividendo / $divisor;!}!!try !{!! $quociente = divisao(6, 0); // Fatal Error!} !catch (\Exception $ex) !{!! printf("Error: %s", $ex->getMessage());!}!finally !{!! print('Finally sempre será executado...');!}!

Page 48: Curso PHP UNIFACS 2014.1 – 2ª aula

SPL Exceptionshttp://php.net/manual/en/spl.exceptions.php

Page 49: Curso PHP UNIFACS 2014.1 – 2ª aula

SPL Exceptions

<?php!!class ValidationFailedException extends Exception {}!

Page 50: Curso PHP UNIFACS 2014.1 – 2ª aula

Try / Catch<?php!$email = new Fuel\Email;!$email->subject('My Subject');!$email->body('How the heck are you?');!$email->to('[email protected]', 'Some Guy');!!try!{! $email->send();!}!catch(Fuel\Email\ValidationFailedException $e)!{! // The validation failed!}!catch(Fuel\Email\SendingFailedException $e)!{! // The driver could not send the email!}!finally!{! /* Executed regardless of whether an exception has been ! ! thrown, and before normal execution resumes */!}!

Page 51: Curso PHP UNIFACS 2014.1 – 2ª aula

JSONJSON (JavaScript Object Notation - Notação de

Objetos JavaScript) é uma formatação leve de troca de dados. Para seres humanos, é fácil de ler e escrever.

Para máquinas, é fácil de interpretar e gerar.

JSON está constituído em duas estruturas: • Uma coleção de pares nome/valor. Em várias linguagens,

isto é caracterizado como um object, record, struct, dicionário, hash table, keyed list, ou arrays associativas.

• Uma lista ordenada de valores. Na maioria das linguagens, isto é caracterizado como uma array, vetor, lista ou sequência.

Page 52: Curso PHP UNIFACS 2014.1 – 2ª aula

JSON

{!! "clientes": [!! ! {"nome":"John" , "sobrenome":"Doe"}, !! ! {"nome":"Anna" , "sobrenome":"Smith"}, !! ! {"nome":"Peter" , "sobrenome":"Jones"}!! ]!}!

www.json.org

Page 53: Curso PHP UNIFACS 2014.1 – 2ª aula

API da Matriz de distâncias do Google

https://developers.google.com/maps/documentation/distancematrix/?hl=pt-br

É um serviço que fornece distância e tempo de deslocamento para uma matriz de origens e destinos. As informações retornadas são baseadas no

trajeto recomendado entre pontos de partida e de chegada, conforme calculado pela API do Google Maps, e consistem em linhas que contêm

valores duration e distance para cada par.

Page 54: Curso PHP UNIFACS 2014.1 – 2ª aula