Tipos de Dados do PHP7

Photo by Jordan Heinrichs on Unsplash

2019-10-05 @ 4º PHP Vale Meetup

Davi Marcondes Moreira - @devdrops

Evolua seu código!

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

Tipos?

Mas o que são

Representação dos dados

Possibilidades

Características

Triângulo

Círculo

Quadrado

Boolean

Integers

Strings

Lanchas

Jetskis

Banhistas

Tipada?

E o que é uma linguagem

Estritos

Photo by Alex King on Unsplash

Dinâmicos

Photo by Steve Johnson on Unsplash

PHP?

E onde entra o

Objetos

(PHP 5.0)

Arrays

(PHP 5.1)

Callable

(PHP 5.4)

Escalares

(PHP 7.0)

Tipos Suportados

> boolean

> integer

> float

> string

> array

> object

> callable

> iterable

> resource

> null

> mixed

> number

> callback

> array|object

> void

<?php
declare(strict_types=1);

Retornos

Parâmetros e

Exemplo 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

Exemplo 2

<?php
declare(strict_types=0);

function OlocoBixo(int $value)
{
    var_dump($value);
}

$foo = "100";
OlocoBixo($foo);

// int(100)

Exemplo 3

Exemplo 4

<?php
declare(strict_types=1);

function Eita(): int
{
    return 150;
}

var_dump(Eita());

// int(150)

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

Exemplo 6

<?php
declare(strict_types=0);

function Eita(): int
{
    return 1.5;
}

var_dump(Eita());

// int(1)

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

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

Classes

Propriedades de

Em implementação para PHP 7.4

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;
    }
}

Exemplo 10

<?php
declare(strict_types=1);

class Foo {
    public string $name;
    
    public function __construct(string $name) {
        $this->name = $name;
    }
}

Variáveis?

Mas e as

Os tipos são determinados pelo contexto onde são usadas

<?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

Conclusões

- 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.

Dúvidas?

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/

Muito obrigado!

bit.ly/tipos-php7-phpvale

@devdrops

https://forms.gle/9CAPvAPHbNrkWXRP7

Made with Slides.com