Попробуем разобраться в:
Что из себя представляют атрибуты
Какие преимущества от использования атрибутов
Напишем парочку примеров.
В первую очередь, атрибуты, что появились в php 8
Заменили нам уже когда-то имеющиеся аннотации,
которые например использовались в Doctrine, и находились они в docBlock пример можно посмотреть тут https://www.doctrine-project.org/projects/doctrine-orm/en/2.14/reference/annotations-reference.html что тогда, когда были аннотации, их разбирали путем парсинга докблока через рефлексию самого php
Из документации: Атрибуты предлагают возможность добавлять структурированные, машиночитаемые метаданные для следующих деклараций в коде: классы, методы, функции, параметры, свойства и константы класса.
P.S.: В этой статейке рассмотрим примеры относительно классов и методов
<?php
declare(strict_types=1);
#[Attribute]
class ClassExampleAttribute
{
public function __construct(public string $testArgument)
{}
}
class MyClass
{
#[ClassExampleAttribute('Hello World')]
public function index()
{
echo PHP_EOL.'Hi';
}
}
$reflectionMethod = new \ReflectionMethod(MyClass::class, 'index');
$methodAttributes = $reflectionMethod->getAttributes();
print_r($methodAttributes[0]->newInstance()->testArgument);
print_r($reflectionMethod->invoke(new MyClass));
То есть, таким образом, мы можем связать метод с некоторой дополнительной логикой и внешним кодом, конфигурируя в описании атрибута