Como bem sabemos o PHP tem uma tipagem fraca, e ele continua com esta característica. Porem na nova versão PHP 7 lançada dia 03/12/2015, trazendo novos tipos para o Scalar Type declarations.

Os novos tipos implementados são:

  • int;
  • float;
  • string;
  • bool.

Temos dois tipos de declaração, a coercive ( sendo default) e a strict (rigorosa), para acessar a strict é necessário informar no incio do arquivo PHP. Para isso devemos utilizar a função declare() para definir diretivas de execução para um bloco de código.

Exemplo:

1
2
3
<?php

declare(strict_types=1);

Pois bem, tudo muito bonito porem show me the code!!!

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php

declare(strict_types=1);

class Calculator
{
  /**
   * Performs the sum between two values
   * 
   * @param  float  $value1 value sum
   * @param  float  $value2 value sum
   * 
   * @return float  resulting of sum
   */
  public function sumCurrency(float $value1, float $value2)
  {
    $result = $value1 + $value2;

    return $result;
  }
}

$calculator = new calculator();

echo $calculator->sumCurrency(15.5, 22.1);

O resultado será 37.6

Acesse aqui o repositório do GitHub.

O exemplo visto acima é uma implementação básica e didática, vamos realizar agora uma implementação um pouco mais elaborada.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<?php

declare(strict_types=1);

class Pdf
{
  /**
   * paper orientation
   * 
   * @var string
   */
  protected $paper;

  /**
   * Font size
   * 
   * @var int
   */
  protected $fontSize;

  /**
   * Paragraph
   * 
   * @var string
   */
  protected $paragraph;

  /**
   * Configuration document PDF.
   * 
   * @param string $paper     paper orientation
   * @param int    $fontSize  document font size
   * @param string $paragraph text of document
   */
  public function __construct(string $paper, int $fontSize, string $paragraph)
  {
    $this->paper        = $paper;
    $this->fontSize   = $fontSize;
    $this->paragraph = $paragraph;
  }

  /**
   * Return document configuration.
   * 
   * @return array
   */
  public function getDocumentConfiguration()
  {
    return [
      'paper'     => $this->paper,
      'fontSize'  => $this->fontSize,
      'paragraph' => $this->paragraph,
    ];
  }

  //other implementations...
}

$documentData = 'Lorem ipsum dolor sit amet';

$pdf = new Pdf('a4', 12, $documentData);

var_dump($pdf->getDocumentConfiguration());

/**
 * Output:
 *  
 * array(3) {
 *   ["paper"]     => string(2) "a4"
 *   ["fontSize"]  => int(12)
 *   ["paragraph"] => string(26) "Lorem ipsum dolor sit amet"
 * }
 */

Como resultado, teremos um array contendo as configurações do documento.

Caso seja passado algum parâmetro que não corresponda ao desejado, como por exemplo $fontSize = ’12’, o PHP retornará um erro fatal.

1
// Output: PHP Fatal error: Uncaught TypeError: Argument 2 passed to Pdf::__construct() must be of the type integer, string given.

O que nos garante que sejam passados os tipos desejados para o método.

Ok, mas quais são as vantagens de usar este novo recurso?

Simples, dentre as vantagens temos:

  1. Maior qualidade de código;
  2. Melhor estrutura para implementação de testes;
  3. Melhor legibilidade;
  4. Melhor definição de atributos de métodos;
  5. Eliminamos qualquer estrutura de validação e tipo de parâmetro recebido.

Acesse aqui o repositório do GitHub

Bom, é isso pessoal espero que vocês estejam tão empolgados quanto eu para utilizar os novos recursos do PHP 7. Dentre em breve vou lançar mais 3 posts para abordarmos mais novas features.

Um grande abraço e até a próxima!