-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathexemplos-enum.php
More file actions
122 lines (84 loc) · 1.69 KB
/
Copy pathexemplos-enum.php
File metadata and controls
122 lines (84 loc) · 1.69 KB
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
<?php
declare(strict_types=1);
// php81 exemplos-enum.php
/**
* exemplo 1: Como era antes
abstract class Status {
const ATIVO = 0;
const INATIVO = 1;
const PENDENTE = 2;
}
var_dump(Status::ATIVO);
function setStatus(Status $status): void
{
// ...
}
// setStatus(Status::ATIVO); // Fatal error: Uncaught TypeError: setStatus(): Argument #1 ($status) must be of type Status, string given
*/
/**
* exemplo 2: A solução que nós utilizamos na nossa codebase
include 'Enum.php';
class Status extends Enum
{
const ATIVO = '0';
const INATIVO = '1';
const PENDENTE = '2';
}
// $status = Status::ativo(); // object(Status)#1 (1) { ["value":protected]=> string(1) "0" }
function setStatus(Status $status): void
{
// ...
}
setStatus(Status::ativo()); // void
*/
/**
* exemplo 3: Como utilizar?
enum Naipe
{
case Copas;
case Ouros;
case Paus;
case Espadas;
}
var_dump(Naipe::Copas);
var_dump(Naipe::Espadas->name);
*/
/**
* exemplo 4: Backed enumerations
enum Naipe: string
{
case Copas = 'C';
case Ouros = 'O';
case Paus = 'P';
case Espadas = 'E';
}
var_dump(Naipe::Copas);
var_dump(Naipe::Copas->name);
var_dump(Naipe::Copas->value);
// from
var_dump(Naipe::from('C'));
var_dump(Naipe::from('J'));
// tryFrom
var_dump(Naipe::tryFrom('C'));
var_dump(Naipe::tryFrom('J'));
enum Status: int
{
case ATIVO = 0;
}
var_dump(Status::from('0'));
*/
/**
* exemplo 5: Métodos de enumerações
enum Status: int
{
case ATIVO = 0;
case INATIVO = 1;
case PENDENTE = 2;
public function canApprove(): bool
{
return $this === Status::PENDENTE;
}
}
$status = Status::from(0);
var_dump($status->canApprove());
*/