korim/attributes

注解/属性读取器

1.0.5 2023-07-08 09:09 UTC

This package is auto-updated.

Last update: 2024-08-31 00:43:59 UTC


README

codecov Type Coverage Continuous Integration Static Analysis Coding Standards

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;
+    }
}

有关注解兼容属性的更多信息,请参阅具有命名参数的构造函数