Created
October 8, 2020 12:32
-
-
Save elton-fonseca/6b60350aa8db44878b2dda4b25a0b323 to your computer and use it in GitHub Desktop.
Atributos também conhecidos como annotations no PHP 8
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
class Carro | |
{ | |
#[Validacao('max', 110)] | |
public int $velocidade; | |
} | |
#[Attribute] | |
class Validacao{ | |
public function __construct( | |
public string $regra, | |
public string $valor | |
){} | |
public static function validar(object $classe) | |
{ | |
$reflectionClass = new ReflectionClass($classe::class); | |
foreach ($reflectionClass->getProperties() as $propriedade) { | |
$nomePropriedade = $propriedade->getName(); | |
$attributes = $propriedade->getAttributes(self::class); | |
//var_dump($attributes); | |
foreach ($attributes as $attribute) { | |
$dados = $attribute->newInstance(); | |
$regra = $dados->regra; | |
$mensagemValidacao = Regras::$regra( | |
$classe->$nomePropriedade, | |
$dados->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 maximo'; | |
} | |
} | |
$uno = new Carro; | |
$uno->velocidade = 20; | |
Validacao::validar($uno); | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment