Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

Davi Marcondes Moreira

October 05, 2019
Tweet

More Decks by Davi Marcondes Moreira

Other Decks in Programming

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 Suportados Tipos Suportados > boolean > integer > float

    > string > array > object > callable > iterable > resource > null > mixed > number > callback > array|object > void
  4. 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
  5. <?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
  6. <?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
  7. 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
  8. 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
  9. 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
  10. 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
  11. 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
  12. 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
  13. 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
  14. Os tipos são determinados Os tipos são determinados pelo pelo

    contexto contexto onde são onde são usadas usadas
  15. <?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
  16. - 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.
  17. 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/