52. 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
54. 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
55. 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
57. 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)
58. 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)
62. 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)
69. o nullable type permite que
seja utilizado um valor do
tipo especificado ou nulo
70. 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
71. 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