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

Introdução a Tipos em PHP

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest. →

Introdução a Tipos em PHP

O conceito de tipos é muito importante para as linguagens de programação e dominá­-lo é essencial para a produção de códigos de qualidade. Porém, este conceito é, muitas vezes, incompreendido por muitos programadores. Nesta palestra serão apresentadas a definição de tipos, sistema de tipos, tipagem estática e dinâmica, tipagem forte e fraca, como funciona o sistema de tipos em PHP, novidades do PHP 7 em relação à tipos (scalar type hints, declaração de tipos de retorno e tipagem estrita), como funciona o sistema de tipos em Hack, vantagens e desvantagens na utilização de tipos em linguagens de programação e qual é o futuro do PHP em relação à tipos.

Marcel dos Santos

October 18, 2016

Transcript

77 slides
  1. Learning OOP in PHP Tutoriais, vídeos, slides, livros sobre OOP,

    OOD, design patterns, refatoração e arquitetura. bit.ly/Learning-OOP-in-PHP
  2. a checagem de tipo é um processo de verificação e

    garantia das restrições de tipos
  3. o erro de tipo ocorre se o programa executa uma

    operação com tipos incompatíveis
  4. Exemplo 5 // Define variáveis de diversos tipos $a_boolean =

    true; $an_int = 10; $a_float = 3.14; $a_string = 'joe'; $a_null = null; $a_array = []; $a_callable = function() { return 'Hey!'; }; $a_object = new stdClass;
  5. Exemplo 6 // Obtém o valor e o tipo das

    variáveis // utilizando a função var_dump() var_dump($a_boolean); // bool(true) var_dump($an_int); // int(10) var_dump($a_float); // float(3.14) var_dump($a_string); // string(3) "joe" var_dump($a_null); // NULL var_dump($a_array); // array(0) {} var_dump($a_callable); // object(Closure)#1 (0) {} var_dump($a_object); // object(stdClass)#2 (0) {}
  6. Exemplo 7 // Obtém o tipo das variáveis utilizando a

    // função gettype() echo gettype($a_boolean) . PHP_EOL; // boolean echo gettype($an_int) . PHP_EOL; // integer echo gettype($a_float) . PHP_EOL; // double echo gettype($a_string) . PHP_EOL; // string echo gettype($a_null) . PHP_EOL; // NULL echo gettype($a_array) . PHP_EOL; // array echo gettype($a_callable) . PHP_EOL; // object echo gettype($a_object) . PHP_EOL; // object
  7. Exemplo 8 // Verifica se as variáveis são de determinado

    // tipo utilizando as funções is_*() var_dump(is_bool($a_boolean)); // bool(true) var_dump(is_bool($an_int)); // bool(false) var_dump(is_int($an_int)); // bool(true) var_dump(is_int($a_float)); // bool(false) var_dump(is_float($a_float)); // bool(true) var_dump(is_float($a_string)); // bool(false) var_dump(is_string($a_string)); // bool(true) var_dump(is_string($a_null)); // bool(false) var_dump(is_null($a_null)); // bool(true) var_dump(is_null($a_array)); // bool(false)
  8. Exemplo 9 // Conversão de valores entre tipos var_dump((bool) "1.5");

    // bool(true) var_dump((int) "1.5"); // int(1) var_dump((float) "1.5"); // float(1.5) var_dump((unset) "1.5"); // NULL var_dump((string) 1.5); // string(3) "1.5" var_dump((array) 1.5); // array(1) { [0] => float(1.5) } var_dump((array) "1.5"); // array(1) { [0] => string(3) "1.5" } var_dump((object) 1.5); // object(stdClass)#1 (1) {["scalar"] => … var_dump((object) "1.5"); // object(stdClass)#1 (1) {["scalar"] => …
  9. Exemplo 10 // Conversão automática de tipos utilizando // o

    operador de adição $var = "0"; var_dump($var); // string(2) "0" $var += 5; var_dump($var); // int(5) $var = $var + 3.1; var_dump($var); // float(8.1) $var = 5 + "10 cachorros"; var_dump($var); // int(15)
  10. Exemplo 11 // Declaração de tipos utilizando classes class Mammal

    {} class Cat extends Mammal {} class Duck {} function sayHi(Mammal $mammal) { echo 'Hi ' . get_class($mammal) . '!'; } sayHi(new Mammal); // Hi Mammal! sayHi(new Cat); // Hi Cat! // sayHi(new Duck); // PHP Fatal error: Uncaught TypeError: Argument 1 passed to sayHi() must be an instance of Mammal, instance of Duck given
  11. Exemplo 12 declare(strict_types=0); // conversão do tipo float para inteiro

    function sum(int $a, int $b) { return $a + $b; } var_dump(sum(1, 2)); // int(3) var_dump(sum(1.5, 2.5)); // int(3) var_dump(sum("2", "5")); // int(7) var_dump(sum(true, true)); // int(2) var_dump(sum("2 gatos", "3 ratos")); // int(5) PHP Notice: A non well formed numeric value encountered
  12. Exemplo 13 declare(strict_types=1); // dispara uma exceção quando são informados

    // valores que não são dos tipos declarados function sum(int $a, int $b) { return $a + $b; } var_dump(sum(1, 2)); // int(3) // var_dump(sum(1.5, 2.5)); // PHP Fatal error: Uncaught TypeError: Argument 1 passed to sum() must be of the type integer, float given
  13. Exemplo 14 // O valor de retorno é convertido para

    o tipo // correto caso não sejam do tipo informado function sum($a, $b): int { return $a + $b; } var_dump(sum(1, 2)); // int(3) var_dump(sum(1.7, 2.5)); // int(4) var_dump(sum(true, true)); // int(2) var_dump(sum("3 peixes", "5 patos")); // int(8)
  14. Exemplo 15 declare(strict_types=1); // A função dispara uma exceção quando

    são infor- // mados valores que não são dos tipos declarados function sum($a, $b): int { return $a + $b; } var_dump(sum(1, 2)); // int(3) // var_dump(sum(1.7, 2.5)); // PHP Fatal error: Uncaught TypeError: Return value of sum() must be of the type integer, float var_dump(sum(true, true)); // int(2) var_dump(sum("3 peixes", "5 patos")); // int(8)
  15. Exemplo 16 declare(strict_types=1); // Capturando erro try { var_dump(sum(1, 2));

    // int(3) var_dump(sum(...[4, 5])); // int(9) var_dump(sum(1.5, 2.5)); // Error: Return value of sum() must be of the type integer, float returned } catch (TypeError $e) { echo 'Error: ' . $e->getMessage(); }
  16. Exemplo 17 // Utilização do operador de tipos `instanceof` class

    Cat {} class Dog {} $cat = new Cat; var_dump($cat instanceof Cat); // bool(true) var_dump($cat instanceof Dog); // bool(false)
  17. Exemplo 18 // No PHP 7.0 funções não aceitam valores

    // nulos como argumento function increment(int $a) { return $a + 1; } var_dump(increment(8)); // int(9) // var_dump(increment(null)); // TypeError: Argument 1 passed to increment() must be of the type integer, null given
  18. Exemplo 19 // No PHP 7.1 funções aceitam nulos como

    // argumento utilizando ? antes do nome do tipo function increment2(?int $a) { return $a + 1; } var_dump(increment2(5)); // int(9) var_dump(increment2(null)); // int(1) // var_dump(increment2()); // PHP Fatal error: Uncaught ArgumentCountError: Too few arguments to function increment2(), 0 passed

More Decks by Marcel dos Santos

Other Decks in Programming