SlideShare une entreprise Scribd logo
1  sur  54
Télécharger pour lire hors ligne
PHPBásico	
  II
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';!
}!
While / Do-While
<?php!
!
/* While */!
$i = 1;!
while ($i <= 10) {!
! echo $i++;!
}!
!
/* Do-While */!
$i = 1;!
do {!
! echo $i++;!
} while ($i <= 10);!
For / Foreach
<?php!
!
for ($i = 0; $i <= 100; $i++) {!
! echo $i . PHP_EOL;!
} !
!
foreach (range(0, 100) as $numero) {!
! echo $numero . PHP_EOL;!
}!
Foreach
<?php!
!
for ($i = 0; $i <= 100; $i++) {!
! echo $i . PHP_EOL;!
} !
!
foreach (range(0, 100) as $numero) {!
! echo $numero . PHP_EOL;!
}!
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!
*****/!
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!
*****/!
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;!
}!
Include / Require
arquivo01.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!
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
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
• 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
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
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!
15
http://www.php.net/manual/pt_BR/function.array-filter.php
16
http://php.net/manual/en/function.call-user-func-array.php
17
https://wiki.php.net/rfc/closures
Funções Anônimas no PHP
Onde Estudar?
www.phptherightway.com
Onde Estudar?
www.php.net/docs.php
Onde Estudar?
www.php.net/docs.php
Onde Estudar?
http://www.codecademy.com/tracks/php
Onde Estudar?
http://www.w3schools.com/html/html_intro.asp
Onde Estudar?
http://www.codecademy.com/tracks/web
Onde Estudar?
http://www.w3c.br/Cursos/CursoHTML5
25
PHP!
Orientado a Objetos
• 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
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!
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!
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...!
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();!
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();!
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!
Método Abstrato
<?php!
!
abstract class MinhaClasse!
{!
! abstract function metodoAbstrato();!
!
! public function getAtributo()!
! {! return $this->atributo;!
! }!
!
}!
!
$objeto = new MinhaClasse(); // Fatal Error!
Como utilizar o mesmo
nome de classe em uma
outra biblioteca?
Namespaces
O que é Namespace?
c:arquivospasta01foo.txt
c:arquivospasta02foo.txt
Assim, consigo ter arquivos com os
mesmos nomes, porém, em
caminhos diferentes.
36
Namespaces
<?php!
!
namespace EscolaPublica;!
!
class Estudante!
{!
!
! public $matricula, $nome, $serie;!
!
! function __construct($matricula, $nome, $serie)!
! {!
! ! $this->matricula = $matricula;!
! ! $this->nome = $nome;!
! ! $this->serie = $serie;!
! }!
!
}!
37
Namespaces
<?php!
!
namespace EscolaPrivada;!
!
class Estudante!
{!
!
! public $matricula, $nome, $serie;!
!
! function __construct($matricula, $nome, $serie)!
! {!
! ! $this->matricula = $matricula;!
! ! $this->nome = $nome;!
! ! $this->serie = $serie;!
! }!
!
}!
38
Namespaces
<?php!
!
require 'projeto/src/publica/Estudante.php';!
$joao = new EscolaPublicaEstudante();!
!
require 'projeto/src/privada/Estudante.php';!
$pedro = new EscolaPrivadaEstudante();!
Namespaces
<?php!
// PHP 5.3 and later:!
namespace VendorModel;!
!
class Foo!
{!
}!
!
<?php!
// PHP 5.2.x and earlier:!
class Vendor_Model_Foo!
{!
}!
Namespaces
<?php!
!
require 'projeto/src/publica/Estudante.php';!
require 'projeto/src/privada/Estudante.php';!
!
use EscolaPublicaEstudante as EstudantePublica();!
use EscolaPrivadaEstudante as EstudantePrivada();!
!
$joao = new EstudantePublica();!
$pedro = new EstudantePrivada();!
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');!
Constantes
<?php!
namespace VendorModel;!
!
class Foo!
{!
const VERSION = '1.0';!
const DATE_APPROVED = '2012-06-01';!
!
public function getVersion()!
{! return self::VERSION;!
}!
}!
!
echo Foo::VERSION;!
Traits
<?php!
!
trait Hello!
{!
! function ola($nome)!
! {! echo "Olá, {$nome}!";!
! }!
}!
!
class Pessoa!
{!
! use Hello;!
}!
!
$joao = new Pessoa();!
$joao->ola('Maria'); //Olá, Maria!!
DateTime
<?php!
!
$input = '12. 30. 2014';!
$data = DateTime::createFromFormat('m. d. Y', $input);!
!
echo 'Data no Padrão BR: ' . $data->format('d/m/Y');!
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)!
**/!
Autoload
Simples
<?php!
!
function __autoload($classe)!
{!
! require $classe . '.php'; // require 'Pessoa.php';!
}!
!
$pessoa = new Pessoa();!
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...');!
}!
SPL Exceptions
http://php.net/manual/en/spl.exceptions.php
SPL Exceptions
<?php!
!
class ValidationFailedException extends Exception {}!
Try / Catch
<?php!
$email = new FuelEmail;!
$email->subject('My Subject');!
$email->body('How the heck are you?');!
$email->to('guy@example.com', 'Some Guy');!
!
try!
{!
$email->send();!
}!
catch(FuelEmailValidationFailedException $e)!
{!
// The validation failed!
}!
catch(FuelEmailSendingFailedException $e)!
{!
// The driver could not send the email!
}!
finally!
{!
/* Executed regardless of whether an exception has been !
! thrown, and before normal execution resumes */!
}!
JSON
JSON (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.
JSON
{!
! "clientes": [!
! ! {"nome":"John" , "sobrenome":"Doe"}, !
! ! {"nome":"Anna" , "sobrenome":"Smith"}, !
! ! {"nome":"Peter" , "sobrenome":"Jones"}!
! ]!
}!
www.json.org
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.
Curso PHP UNIFACS 2014.1 – 2ª aula

Contenu connexe

Tendances

Tendances (19)

2ª aula php
2ª aula php2ª aula php
2ª aula php
 
Introducao ao Shell Script
Introducao ao Shell ScriptIntroducao ao Shell Script
Introducao ao Shell Script
 
PHP Experience 2016 - [Palestra] Keynote: PHP-7
PHP Experience 2016 - [Palestra] Keynote: PHP-7PHP Experience 2016 - [Palestra] Keynote: PHP-7
PHP Experience 2016 - [Palestra] Keynote: PHP-7
 
Curso PHP: Básico JavaScript
Curso PHP: Básico JavaScriptCurso PHP: Básico JavaScript
Curso PHP: Básico JavaScript
 
PHP 7
PHP 7PHP 7
PHP 7
 
Yet Another Ruby Framework - Como o Rails funciona por dentro
Yet Another Ruby Framework - Como o Rails funciona por dentroYet Another Ruby Framework - Como o Rails funciona por dentro
Yet Another Ruby Framework - Como o Rails funciona por dentro
 
Curso de Introdução - PHP
Curso de Introdução - PHPCurso de Introdução - PHP
Curso de Introdução - PHP
 
Generators PHP
Generators PHPGenerators PHP
Generators PHP
 
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes AuraPHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura
 
PHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta PerformancePHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta Performance
 
PHP básico para iniciantes
PHP básico para iniciantesPHP básico para iniciantes
PHP básico para iniciantes
 
O que mudou no Ruby 1.9
O que mudou no Ruby 1.9O que mudou no Ruby 1.9
O que mudou no Ruby 1.9
 
jQuery Simplificando o JavaScript
jQuery Simplificando o JavaScriptjQuery Simplificando o JavaScript
jQuery Simplificando o JavaScript
 
PHP Experience 2016 - [Palestra] Rumo à Certificação PHP
PHP Experience 2016 - [Palestra] Rumo à Certificação PHPPHP Experience 2016 - [Palestra] Rumo à Certificação PHP
PHP Experience 2016 - [Palestra] Rumo à Certificação PHP
 
Desenvolvimento de sistemas web com PHP Frameworks - Aula 3
Desenvolvimento de sistemas web com PHP Frameworks - Aula 3Desenvolvimento de sistemas web com PHP Frameworks - Aula 3
Desenvolvimento de sistemas web com PHP Frameworks - Aula 3
 
Introdução ao Ruby
Introdução ao RubyIntrodução ao Ruby
Introdução ao Ruby
 
Arrays PHP - Criação de sites II
Arrays PHP - Criação de sites IIArrays PHP - Criação de sites II
Arrays PHP - Criação de sites II
 
Hibernate efetivo (IA-2014 / Disturbing the Mind)
Hibernate efetivo (IA-2014 / Disturbing the Mind)Hibernate efetivo (IA-2014 / Disturbing the Mind)
Hibernate efetivo (IA-2014 / Disturbing the Mind)
 
Hibernate efetivo (COALTI-2014 / ALJUG)
Hibernate efetivo (COALTI-2014 / ALJUG)Hibernate efetivo (COALTI-2014 / ALJUG)
Hibernate efetivo (COALTI-2014 / ALJUG)
 

Similaire à Curso PHP UNIFACS 2014.1 – 2ª aula

Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passos
Regis Magalhães
 
Serversidephp pptx2-120418140114-phpapp01
Serversidephp pptx2-120418140114-phpapp01Serversidephp pptx2-120418140114-phpapp01
Serversidephp pptx2-120418140114-phpapp01
joaocarlobarros
 
PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX
Sérgio Souza Costa
 

Similaire à Curso PHP UNIFACS 2014.1 – 2ª aula (20)

Aprofunde se no php 5.3
Aprofunde se no php 5.3Aprofunde se no php 5.3
Aprofunde se no php 5.3
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passos
 
Serversidephp pptx2-120418140114-phpapp01
Serversidephp pptx2-120418140114-phpapp01Serversidephp pptx2-120418140114-phpapp01
Serversidephp pptx2-120418140114-phpapp01
 
PHP Day - PHP para iniciantes
PHP Day - PHP para iniciantesPHP Day - PHP para iniciantes
PHP Day - PHP para iniciantes
 
PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX
 
O que há de novo no PHP 5.3
O que há de novo no PHP 5.3O que há de novo no PHP 5.3
O que há de novo no PHP 5.3
 
5 Maneiras de melhorar seu código PHP
5 Maneiras de melhorar seu código PHP5 Maneiras de melhorar seu código PHP
5 Maneiras de melhorar seu código PHP
 
apostila.pdf
apostila.pdfapostila.pdf
apostila.pdf
 
TDC 2016 - PHP7
TDC 2016 - PHP7TDC 2016 - PHP7
TDC 2016 - PHP7
 
Rodando PHP em um container Java
Rodando PHP em um container JavaRodando PHP em um container Java
Rodando PHP em um container Java
 
Introdução ao PHP Parte 2
Introdução ao PHP Parte 2Introdução ao PHP Parte 2
Introdução ao PHP Parte 2
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
 
Introducao a orientacao a objetos com PHP
Introducao a orientacao a objetos com PHPIntroducao a orientacao a objetos com PHP
Introducao a orientacao a objetos com PHP
 
Brasiliatestfest
BrasiliatestfestBrasiliatestfest
Brasiliatestfest
 
A Revolução dos Middlewares
A Revolução dos MiddlewaresA Revolução dos Middlewares
A Revolução dos Middlewares
 
SIMCIT 2013 - Mini-curso PHP
SIMCIT 2013 - Mini-curso PHPSIMCIT 2013 - Mini-curso PHP
SIMCIT 2013 - Mini-curso PHP
 
Lista de exercícios em Bash (resolvida)
Lista de exercícios em Bash (resolvida) Lista de exercícios em Bash (resolvida)
Lista de exercícios em Bash (resolvida)
 
Novas Funcionalidade no PHP 5.3
Novas Funcionalidade no PHP 5.3Novas Funcionalidade no PHP 5.3
Novas Funcionalidade no PHP 5.3
 
PHP para Adultos: Clean Code e Object Calisthenics
PHP para Adultos: Clean Code e Object CalisthenicsPHP para Adultos: Clean Code e Object Calisthenics
PHP para Adultos: Clean Code e Object Calisthenics
 
Curso PHP UNIFACS 2014.1 – 1a Aula
Curso PHP UNIFACS 2014.1 – 1a AulaCurso PHP UNIFACS 2014.1 – 1a Aula
Curso PHP UNIFACS 2014.1 – 1a Aula
 

Plus de Jonata Weber (7)

Programando sua carreira
Programando sua carreiraProgramando sua carreira
Programando sua carreira
 
Curso PHP UNIFACS 2014.1 – Frameworks
Curso PHP UNIFACS 2014.1 – FrameworksCurso PHP UNIFACS 2014.1 – Frameworks
Curso PHP UNIFACS 2014.1 – Frameworks
 
Curso PHP UNIFACS 2014.1 – Databases & Sessions
Curso PHP UNIFACS 2014.1 – Databases & SessionsCurso PHP UNIFACS 2014.1 – Databases & Sessions
Curso PHP UNIFACS 2014.1 – Databases & Sessions
 
Padrões de Projeto em Aplicações Web
Padrões de Projeto em Aplicações WebPadrões de Projeto em Aplicações Web
Padrões de Projeto em Aplicações Web
 
PHP Orientado a Objetos - 1a Parte
PHP Orientado a Objetos - 1a PartePHP Orientado a Objetos - 1a Parte
PHP Orientado a Objetos - 1a Parte
 
Curso PHP - 2a. Aula (2013.2)
Curso PHP - 2a. Aula (2013.2)Curso PHP - 2a. Aula (2013.2)
Curso PHP - 2a. Aula (2013.2)
 
Curso PHP - 1a. Aula (2013.2)
Curso PHP - 1a. Aula (2013.2)Curso PHP - 1a. Aula (2013.2)
Curso PHP - 1a. Aula (2013.2)
 

Curso PHP UNIFACS 2014.1 – 2ª aula

  • 2. 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';! }!
  • 3. While / Do-While <?php! ! /* While */! $i = 1;! while ($i <= 10) {! ! echo $i++;! }! ! /* Do-While */! $i = 1;! do {! ! echo $i++;! } while ($i <= 10);!
  • 4. For / Foreach <?php! ! for ($i = 0; $i <= 100; $i++) {! ! echo $i . PHP_EOL;! } ! ! foreach (range(0, 100) as $numero) {! ! echo $numero . PHP_EOL;! }!
  • 5. Foreach <?php! ! for ($i = 0; $i <= 100; $i++) {! ! echo $i . PHP_EOL;! } ! ! foreach (range(0, 100) as $numero) {! ! echo $numero . PHP_EOL;! }!
  • 6. 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! *****/!
  • 7. 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! *****/!
  • 8. 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;! }!
  • 9. Include / Require arquivo01.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!
  • 10. 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
  • 11. 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
  • 12. • 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
  • 13. 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
  • 14. 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!
  • 26. • 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
  • 27. 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!
  • 28. 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!
  • 29. 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...!
  • 30. 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();!
  • 31. 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();!
  • 32. 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!
  • 33. Método Abstrato <?php! ! abstract class MinhaClasse! {! ! abstract function metodoAbstrato();! ! ! public function getAtributo()! ! {! return $this->atributo;! ! }! ! }! ! $objeto = new MinhaClasse(); // Fatal Error!
  • 34. Como utilizar o mesmo nome de classe em uma outra biblioteca? Namespaces
  • 35. O que é Namespace? c:arquivospasta01foo.txt c:arquivospasta02foo.txt Assim, consigo ter arquivos com os mesmos nomes, porém, em caminhos diferentes.
  • 36. 36 Namespaces <?php! ! namespace EscolaPublica;! ! class Estudante! {! ! ! public $matricula, $nome, $serie;! ! ! function __construct($matricula, $nome, $serie)! ! {! ! ! $this->matricula = $matricula;! ! ! $this->nome = $nome;! ! ! $this->serie = $serie;! ! }! ! }!
  • 37. 37 Namespaces <?php! ! namespace EscolaPrivada;! ! class Estudante! {! ! ! public $matricula, $nome, $serie;! ! ! function __construct($matricula, $nome, $serie)! ! {! ! ! $this->matricula = $matricula;! ! ! $this->nome = $nome;! ! ! $this->serie = $serie;! ! }! ! }!
  • 38. 38 Namespaces <?php! ! require 'projeto/src/publica/Estudante.php';! $joao = new EscolaPublicaEstudante();! ! require 'projeto/src/privada/Estudante.php';! $pedro = new EscolaPrivadaEstudante();!
  • 39. Namespaces <?php! // PHP 5.3 and later:! namespace VendorModel;! ! class Foo! {! }! ! <?php! // PHP 5.2.x and earlier:! class Vendor_Model_Foo! {! }!
  • 40. Namespaces <?php! ! require 'projeto/src/publica/Estudante.php';! require 'projeto/src/privada/Estudante.php';! ! use EscolaPublicaEstudante as EstudantePublica();! use EscolaPrivadaEstudante as EstudantePrivada();! ! $joao = new EstudantePublica();! $pedro = new EstudantePrivada();!
  • 41. 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');!
  • 42. Constantes <?php! namespace VendorModel;! ! class Foo! {! const VERSION = '1.0';! const DATE_APPROVED = '2012-06-01';! ! public function getVersion()! {! return self::VERSION;! }! }! ! echo Foo::VERSION;!
  • 43. Traits <?php! ! trait Hello! {! ! function ola($nome)! ! {! echo "Olá, {$nome}!";! ! }! }! ! class Pessoa! {! ! use Hello;! }! ! $joao = new Pessoa();! $joao->ola('Maria'); //Olá, Maria!!
  • 44. DateTime <?php! ! $input = '12. 30. 2014';! $data = DateTime::createFromFormat('m. d. Y', $input);! ! echo 'Data no Padrão BR: ' . $data->format('d/m/Y');!
  • 45. 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)! **/!
  • 46. Autoload Simples <?php! ! function __autoload($classe)! {! ! require $classe . '.php'; // require 'Pessoa.php';! }! ! $pessoa = new Pessoa();!
  • 47. 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...');! }!
  • 50. Try / Catch <?php! $email = new FuelEmail;! $email->subject('My Subject');! $email->body('How the heck are you?');! $email->to('guy@example.com', 'Some Guy');! ! try! {! $email->send();! }! catch(FuelEmailValidationFailedException $e)! {! // The validation failed! }! catch(FuelEmailSendingFailedException $e)! {! // The driver could not send the email! }! finally! {! /* Executed regardless of whether an exception has been ! ! thrown, and before normal execution resumes */! }!
  • 51. JSON JSON (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.
  • 52. JSON {! ! "clientes": [! ! ! {"nome":"John" , "sobrenome":"Doe"}, ! ! ! {"nome":"Anna" , "sobrenome":"Smith"}, ! ! ! {"nome":"Peter" , "sobrenome":"Jones"}! ! ]! }! www.json.org
  • 53. 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.