Photo by Jordan Heinrichs on Unsplash
2019-10-05 @ 4º PHP Vale Meetup
Davi Marcondes Moreira - @devdrops
Evolua seu código!
> 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
Triângulo
Círculo
Quadrado
Boolean
Integers
Strings
Lanchas
Jetskis
Banhistas
Photo by Steve Johnson on Unsplash
Objetos
(PHP 5.0)
Arrays
(PHP 5.1)
Callable
(PHP 5.4)
Escalares
(PHP 7.0)
> boolean
> integer
> float
> string
> array
> object
> callable
> iterable
> resource
> null
> mixed
> number
> callback
> array|object
> void
<?php
declare(strict_types=1);
<?php
declare(strict_types=1);
function OlocoBixo(int $value)
{
var_dump($value);
}
$foo = 100;
OlocoBixo($foo);
// int(100)
<?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
<?php
declare(strict_types=0);
function OlocoBixo(int $value)
{
var_dump($value);
}
$foo = "100";
OlocoBixo($foo);
// int(100)
<?php
declare(strict_types=1);
function Eita(): int
{
return 150;
}
var_dump(Eita());
// int(150)
<?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
<?php
declare(strict_types=0);
function Eita(): int
{
return 1.5;
}
var_dump(Eita());
// int(1)
<?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
<?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
Em implementação para PHP 7.4
<?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;
}
}
<?php
declare(strict_types=1);
class Foo {
public string $name;
public function __construct(string $name) {
$this->name = $name;
}
}
<?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
- 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.
- 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/
bit.ly/tipos-php7-phpvale
@devdrops
https://forms.gle/9CAPvAPHbNrkWXRP7