-
Notifications
You must be signed in to change notification settings - Fork 0
/
atributos.php
56 lines (42 loc) · 1.26 KB
/
atributos.php
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
<?php
class Carro {
#[Validacao('max', 110)]
public int $velocidade;
}
#[Attribute]
class Validacao {
public function __construct(
public string $regra,
public int $valor
){}
public static function validar(object $objetoParaValidar)
{
$reflectionClass = new reflectionClass($objetoParaValidar::class);
foreach ($reflectionClass->getProperties() as $propriedade) {
$nomePropriedade = $propriedade->getName();
$atributos = $propriedade->getAttributes(self::class);
foreach ($atributos as $atributo) {
$instanciaValidacao = $atributo->newInstance();
$nomeRegra = $instanciaValidacao->regra;
$mensagemValidacao = Regras::$nomeRegra(
$objetoParaValidar->$nomePropriedade,
$instanciaValidacao->valor
);
echo "$nomePropriedade: $mensagemValidacao";
}
}
}
}
class Regras
{
public static function max(int $valor, int $maximo): string
{
if ($valor > $maximo) {
return 'valor maior que o máximo';
}
return 'valor menor que o máximo';
}
}
$uno = new Carro;
$uno->velocidade = 20;
Validacao::validar($uno);