korim / attributes
注解/属性读取器
1.0.5
2023-07-08 09:09 UTC
Requires
- php: ^7.2 || ^8.0
- doctrine/annotations: ^1.12 || ^2.0
Requires (Dev)
- ext-pdo: *
- bamarni/composer-bin-plugin: ^1.4
- phpunit/phpunit: ^8.5.24 || ^9.5
Suggests
- koriym/param-reader: An attribute/annotation reader for parameters
README
koriym/attributes
双读取器实现了doctrine/annotation 读取器接口,以便读取doctrine/annotation和PHP 8属性。
由于设计上的差异,Doctrine注解与PHP核心注解不同。并非所有属性都能被此读取器读取(例如参数),并且此读取器也无法读取所有doctrine/annotations(例如嵌套注解)。
然而,此读取器可以帮助您编写与未来兼容的代码,支持在某些情况下同时使用PHP 7.x注解和8.x属性。
安装
composer require koriym/attributes
使用
创建读取器实例。
use Doctrine\Common\Annotations\AnnotationReader; use Doctrine\Common\Annotations\Reader; use Koriym\Attributes\DualReader; use Koriym\Attributes\AttributeReader; $reader = new DualReader( new AnnotationReader(), new AttributeReader() ); assert($reader instanceof Reader);
该读取器可以读取注解和属性。
兼容注解
现有的doctrine注解可以转换为既适用于doctrine注解也适用于PHP8属性的注解。
添加#[Attribute]
属性。
use Attribute;
/** @Annotation */
+#[Attribute]
final class Foo
{
}
然后,当注解具有属性时添加构造函数。以下示例同时适用于PHP8属性和doctrine/annotations
。
use Attribute; +use Doctrine\Common\Annotations\NamedArgumentConstructor; /** * @Annotation * @Target("METHOD") +* @NamedArgumentConstructor */ +#[Attribute(Attribute::TARGET_METHOD)] final class Foo { public string $bar; public int $baz; + public function __construct(string $bar = '', int $baz = 0) + { + $this->bar = $bar; + $this->baz = $baz; + } }
有关注解兼容属性的更多信息,请参阅具有命名参数的构造函数。