Tipos de Dados do PHP7 - 4º Meetup PHPVale

Tipos de Dados do PHP7 - 4º Meetup PHPVale

Slides da apresentação realizada no 4º Meetup do PHPVale em Guaratinguetá - SP.
Códigos de exemplo: https://github.com/devdrops/php7-tipos-de-dados

049fbbe4e5fb94c45d6ccd656290d6fb?s=128

Davi Marcondes Moreira

October 05, 2019
Tweet

Transcript

  1. Tipos de Dados do PHP7 Tipos de Dados do PHP7

    Photo by on Jordan Heinrichs Unsplash 2019-10-05 @ 4º PHP Vale Meetup Davi Marcondes Moreira - @devdrops Evolua seu código!
  2. whoami whoami > Davi Marcondes Moreira > @devdrops > Desenvolvedor

    de Software @ Pagar.me > PHP, JavaScript, Kotlin, Go > Terminal é puro ♥ > Defensor do home office e trabalho remoto > Doido por MTB/XCO > Café é a minha religião
  3. Tipos? Tipos? Mas o que são Mas o que são

  4. None
  5. Representação dos dados Representação dos dados

  6. Representação dos dados Representação dos dados Possibilidades Possibilidades

  7. Representação dos dados Representação dos dados Possibilidades Possibilidades Características Características

  8. Triângulo Círculo Quadrado

  9. Triângulo Círculo Quadrado Boolean Integers Strings

  10. Triângulo Círculo Quadrado Boolean Integers Strings Lanchas Jetskis Banhistas

  11. Tipada? Tipada? E o que é uma linguagem E o

    que é uma linguagem
  12. Estritos Estritos Photo by on Alex King Unsplash

  13. Dinâmicos Dinâmicos Photo by on Steve Johnson Unsplash

  14. PHP? PHP? E onde entra o E onde entra o

  15. Objetos (PHP 5.0) Arrays (PHP 5.1) Callable (PHP 5.4) Escalares

    (PHP 7.0)
  16. Tipos Suportados Tipos Suportados > boolean > integer > float

    > string > array > object > callable > iterable > resource > null > mixed > number > callback > array|object > void
  17. <?php declare(strict_types=1);

  18. Retornos Retornos Parâmetros e Parâmetros e

  19. Exemplo 1 Exemplo 1 <?php declare(strict_types=1); function OlocoBixo(int $value) {

    var_dump($value); } $foo = 100; OlocoBixo($foo); // int(100) 1 2 3 4 5 6 7 8 9 10 11 12
  20. <?php declare(strict_types=1); function OlocoBixo(int $value) { var_dump($value); } $foo =

    "100"; OlocoBixo($foo); // Fatal error: Uncaught TypeError: Argument 1 passed to // OlocoBixo() must be of the type int, string given, called // in /code/exemplo2.php on line 10 and defined in // /code/exemplo2.php:4 // Stack trace: // #0 /code/exemplo2.php(10): OlocoBixo('100') // #1 {main} // thrown in /code/exemplo2.php on line 4 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Exemplo 2 Exemplo 2
  21. <?php declare(strict_types=0); function OlocoBixo(int $value) { var_dump($value); } $foo =

    "100"; OlocoBixo($foo); // int(100) 1 2 3 4 5 6 7 8 9 10 11 12 Exemplo 3 Exemplo 3
  22. Exemplo 4 Exemplo 4 <?php declare(strict_types=1); function Eita(): int {

    return 150; } var_dump(Eita()); // int(150) 1 2 3 4 5 6 7 8 9 10 11
  23. Exemplo 5 Exemplo 5 <?php declare(strict_types=1); function Eita(): int {

    return 1.5; } var_dump(Eita()); // Fatal error: Uncaught TypeError: Return value of Eita() must be // of the type int, float returned in /code/exemplo5.php:6 // Stack trace: // #0 /code/exemplo5.php(9): Eita() // #1 {main} // thrown in /code/exemplo5.php on line 6 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
  24. Exemplo 6 Exemplo 6 <?php declare(strict_types=0); function Eita(): int {

    return 1.5; } var_dump(Eita()); // int(1) 1 2 3 4 5 6 7 8 9 10 11
  25. Exemplo 7 Exemplo 7 <?php declare(strict_types=1); class Foo {} function

    Eita(): Foo { return true; } var_dump(Eita()); // Fatal error: Uncaught TypeError: Return value of Eita() must be // an instance of Foo, bool returned in /code/exemplo7.php:8 // Stack trace: // #0 /code/exemplo7.php(11): Eita() // #1 {main} // thrown in /code/exemplo7.php on line 8 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
  26. Exemplo 8 Exemplo 8 <?php declare(strict_types=0); class Foo {} function

    Eita(): Foo { return true; } var_dump(Eita()); // Fatal error: Uncaught TypeError: Return value of Eita() must be // an instance of Foo, bool returned in /code/exemplo8.php:8 // Stack trace: // #0 /code/exemplo8.php(11): Eita() // #1 {main} // thrown in /code/exemplo8.php on line 8 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
  27. Classes Classes Propriedades de Propriedades de Em implementação para PHP

    7.4
  28. Exemplo 9 Exemplo 9 <?php declare(strict_types=1); class Foo { /**

    @var string $name */ private $name; public function __construct(string $name) { $this->name = $name; } public function getName(): string { return $this->name; } public function setName(string $name): void { $this->name = $name; } } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
  29. Exemplo 10 Exemplo 10 <?php declare(strict_types=1); class Foo { public

    string $name; public function __construct(string $name) { $this->name = $name; } } 1 2 3 4 5 6 7 8 9 10
  30. Variáveis? Variáveis? Mas e as Mas e as

  31. Os tipos são determinados Os tipos são determinados pelo pelo

    contexto contexto onde são onde são usadas usadas
  32. <?php declare(strict_types=1); $foo = 100; // $foo é integer $foo

    = false; // $foo é boolean $foo = 1.1; // $foo é float $foo = []; // $foo é array $foo = "aycaramba"; // $foo é string 1 2 3 4 5 6 7 8
  33. Conclusões Conclusões

  34. - Tipos ajudam a tornar a intenção do código mais

    explícita. - Oferecem uma garantia de contrato, sem necessidade de filtrar inputs com intval() e outras funções. - 100% compatível com a flexibilidade do PHP, use se quiser! - Não quebra compatibilidade com outras bibliotecas.
  35. Dúvidas? Dúvidas?

  36. Referências Referências - https://en.wikipedia.org/wiki/Strong_and_weak_typing - https://wiki.php.net/rfc/return_types - https://wiki.php.net/rfc/scalar_type_hints_v5 - https://wiki.php.net/rfc/typed_properties_v2

    - https://www.php.net/manual/en/language.types.php - https://blog.ircmaxell.com/2015/02/scalar-types-and-php.html - https://blog.pascal-martin.fr/post/in-favor-of-rfc-scalar-type-hints/ - https://pensandonaweb.com.br/o-que-ha-de-novo-no-php-7-4/
  37. Muito obrigado! Muito obrigado! bit.ly/tipos-php7-phpvale github.com/devdrops/php7-tipos-de-dados @devdrops https://forms.gle/9CAPvAPHbNrkWXRP7