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
 |