Skip to content

Instantly share code, notes, and snippets.

@elton-fonseca
Created October 8, 2020 12:32
Show Gist options
  • Save elton-fonseca/6b60350aa8db44878b2dda4b25a0b323 to your computer and use it in GitHub Desktop.
Save elton-fonseca/6b60350aa8db44878b2dda4b25a0b323 to your computer and use it in GitHub Desktop.
Atributos também conhecidos como annotations no PHP 8
<?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