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:
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:
- Maior qualidade de código;
- Melhor estrutura para implementação de testes;
- Melhor legibilidade;
- Melhor definição de atributos de métodos;
- 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!