110 lines
3.1 KiB
ReStructuredText
110 lines
3.1 KiB
ReStructuredText
|
|
Deprecation notice
|
||
|
|
==================
|
||
|
|
|
||
|
|
PHP 8 introduced `attributes
|
||
|
|
<https://www.php.net/manual/en/language.attributes.overview.php>`_,
|
||
|
|
which are a native replacement for annotations. As such, this library is
|
||
|
|
considered feature complete, and should receive exclusively bugfixes and
|
||
|
|
security fixes.
|
||
|
|
|
||
|
|
We do not recommend using this library in new projects and encourage authors
|
||
|
|
of downstream libraries to offer support for attributes as an alternative to
|
||
|
|
Doctrine Annotations.
|
||
|
|
|
||
|
|
Have a look at [our blog](https://www.doctrine-project.org/2022/11/04/annotations-to-attributes.html)
|
||
|
|
to learn more.
|
||
|
|
|
||
|
|
Introduction
|
||
|
|
============
|
||
|
|
|
||
|
|
Doctrine Annotations allows to implement custom annotation
|
||
|
|
functionality for PHP classes and functions.
|
||
|
|
|
||
|
|
.. code-block:: php
|
||
|
|
|
||
|
|
class Foo
|
||
|
|
{
|
||
|
|
/**
|
||
|
|
* @MyAnnotation(myProperty="value")
|
||
|
|
*/
|
||
|
|
private $bar;
|
||
|
|
}
|
||
|
|
|
||
|
|
Annotations aren't implemented in PHP itself which is why this component
|
||
|
|
offers a way to use the PHP doc-blocks as a place for the well known
|
||
|
|
annotation syntax using the ``@`` char.
|
||
|
|
|
||
|
|
Annotations in Doctrine are used for the ORM configuration to build the
|
||
|
|
class mapping, but it can be used in other projects for other purposes
|
||
|
|
too.
|
||
|
|
|
||
|
|
Installation
|
||
|
|
============
|
||
|
|
|
||
|
|
You can install the Annotation component with composer:
|
||
|
|
|
||
|
|
.. code-block::
|
||
|
|
|
||
|
|
$ composer require doctrine/annotations
|
||
|
|
|
||
|
|
Create an annotation class
|
||
|
|
==========================
|
||
|
|
|
||
|
|
An annotation class is a representation of the later used annotation
|
||
|
|
configuration in classes. The annotation class of the previous example
|
||
|
|
looks like this:
|
||
|
|
|
||
|
|
.. code-block:: php
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @Annotation
|
||
|
|
*/
|
||
|
|
final class MyAnnotation
|
||
|
|
{
|
||
|
|
public $myProperty;
|
||
|
|
}
|
||
|
|
|
||
|
|
The annotation class is declared as an annotation by ``@Annotation``.
|
||
|
|
|
||
|
|
:ref:`Read more about custom annotations. <custom>`
|
||
|
|
|
||
|
|
Reading annotations
|
||
|
|
===================
|
||
|
|
|
||
|
|
The access to the annotations happens by reflection of the class or function
|
||
|
|
containing them. There are multiple reader-classes implementing the
|
||
|
|
``Doctrine\Common\Annotations\Reader`` interface, that can access the
|
||
|
|
annotations of a class. A common one is
|
||
|
|
``Doctrine\Common\Annotations\AnnotationReader``:
|
||
|
|
|
||
|
|
.. code-block:: php
|
||
|
|
|
||
|
|
use Doctrine\Common\Annotations\AnnotationReader;
|
||
|
|
|
||
|
|
$reflectionClass = new ReflectionClass(Foo::class);
|
||
|
|
$property = $reflectionClass->getProperty('bar');
|
||
|
|
|
||
|
|
$reader = new AnnotationReader();
|
||
|
|
$myAnnotation = $reader->getPropertyAnnotation(
|
||
|
|
$property,
|
||
|
|
MyAnnotation::class
|
||
|
|
);
|
||
|
|
|
||
|
|
echo $myAnnotation->myProperty; // result: "value"
|
||
|
|
|
||
|
|
A reader has multiple methods to access the annotations of a class or
|
||
|
|
function.
|
||
|
|
|
||
|
|
:ref:`Read more about handling annotations. <annotations>`
|
||
|
|
|
||
|
|
IDE Support
|
||
|
|
-----------
|
||
|
|
|
||
|
|
Some IDEs already provide support for annotations:
|
||
|
|
|
||
|
|
- Eclipse via the `Symfony2 Plugin <https://github.com/pulse00/Symfony-2-Eclipse-Plugin>`_
|
||
|
|
- PhpStorm via the `PHP Annotations Plugin <https://plugins.jetbrains.com/plugin/7320-php-annotations>`_ or the `Symfony Plugin <https://plugins.jetbrains.com/plugin/7219-symfony-support>`_
|
||
|
|
|
||
|
|
.. _Read more about handling annotations.: annotations
|
||
|
|
.. _Read more about custom annotations.: custom
|