Я пытаюсь определить и использовать пользовательские аннотации, но не могу понять проблему. Основа - учение / аннотации, и это мои собственные классы:
<?php
namespace MyCompany\Annotations\Annotation;
use Doctrine\Common\Annotations\Annotation;
/**
* @Annotation
* @Target("PROPERTY")
*/
final class Type
{
/**
* @Required
*
* @var string
*/
public $name;
}
<?php
namespace MyCompany\Annotations;
use MyCompany\Annotations\Annotation as MYC;
class Person
{
/**
* @MYC\Type(name = "string")
*/
private $firstName;
/**
* @MYC\Type(name = "string")
*/
private $lastName;
public function __construct($firstName, $lastName)
{
$this->firstName = $firstName;
$this->lastName = $lastName;
}
public function getFirstName()
{
return $this->firstName;
}
public function getLastName()
{
return $this->lastName;
}
}
Теперь я хочу прочитать аннотации всех свойств:
<?php
require __DIR__ . '/../vendor/autoload.php';
use Doctrine\Common\Annotations\AnnotationReader;
use Doctrine\Common\Annotations\CachedReader;
use Doctrine\Common\Cache\ArrayCache;
use MyCompany\Annotations\Person;
$refClass = new ReflectionClass(Person::class);
$props = $refClass->getProperties();
foreach ($props as $prop) {
$reader = new AnnotationReader();
$annotationReader = new CachedReader(
$reader, new ArrayCache()
);
$annotations = $annotationReader->getPropertyAnnotations(
$prop
);
print_r($annotations);
}
Если я запускаю свой тестовый скрипт, он завершается с ошибкой:
Uncaught exception 'Doctrine\Common\Annotations\AnnotationException' with message '[Semantical Error] The annotation "@MyCompany\Annotations\Annotation\Type" in property MyCompany\Annotations\Person::$firstName does not exist, or could not be auto-loaded.'
Меня смущает тот факт, что имя класса в сообщении об ошибке начинается с символа '@'.