Skip to content

Commit 8d694fe

Browse files
committed
Merge pull request #45 from leonardorifeli/master
Added a new user on members and republication article
2 parents 4f2f6d6 + fe993e5 commit 8d694fe

File tree

5 files changed

+119
-1
lines changed

5 files changed

+119
-1
lines changed

_data/members.yml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,4 +48,8 @@ sinesiobittencourt:
4848

4949
renanmpimentel:
5050
name: Renan Pimentel
51-
github: renanmpimentel
51+
github: renanmpimentel
52+
53+
leonardorifeli:
54+
name: Leonardo Rifeli
55+
github: leonardorifeli
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
---
2+
title: Implementando annotations com doctrine annotation reader em PHP
3+
author: leonardorifeli
4+
layout: post
5+
comments: true
6+
slug: implementando-annotations-com-doctrine-annotation-reader-em-php
7+
categories:
8+
- Desenvolvimento
9+
- PHPSC
10+
tags:
11+
- Desenvolvimento
12+
- PHPSC
13+
---
14+
15+
Saudações méros mortais, este é um artigo que escrevi e publiquei, inicialmente no meu blog, estou republicando-o no PHPSC, meu primeiro artigo publicado aqui. Neste artigo mostrarei sobre **annotations** (é claro, está no título).
16+
17+
Como disse meu amigo [Guilherme Diego](https://medium.com/@guidiego) no artigo [Código Limpo é uma Responsabilidade — Blocos](https://medium.com/@guidiego/c%C3%B3digo-limpo-%C3%A9-uma-responsabilidade-blocos-5be1fdd8d341#.gbx5keq0s):
18+
19+
![alt text](/uploads/2016/02/24-annotations/ler-curtir-compartilhar.png "Share the post.")
20+
21+
Enquanto escrevo, vou ouvindo o álbum [As Daylight Dies](https://open.spotify.com/album/6iJEtgHTEbVlSS5isIS71z) da banda Killswitch Engage, é um banda muito bacana.
22+
23+
Enfim, vamos ao que interessa, vem comigo.
24+
25+
## Introdução
26+
27+
Em um projeto recente do qual participei do processo de **refactoring**, o que me auxiliou bastante, foi a implementação de **annotations**, onde foi possível segregar informações estáticas e até atingir algumas práticas de **clean code**, salientando que isso foi uma solução que funcionou bem no respectivo projeto.
28+
29+
Neste artigo eu não discutirei se é o correto, ou não, apenas demonstrarei como implementar **custom annotations** com o **doctrine reader**. Fica sobre teu critério meu chapa!
30+
31+
## Escopo
32+
33+
No exemplo que mostrarei, utilizaremos os seguintes arquivos:
34+
35+
1. **compose.json**: Dependência e informações do projeto;
36+
2. **PeopleAnnotation.php**: Será a nossa annotation, utilizaremos os atributos para receber valores de quem irá consumir a **annotation**;
37+
3. **People.php**: Iremos consumir nossa annotation e informar os respectivos valores para segregarmos informações;
38+
4. **ReaderAnnotation.php**: Neste arquivo iremos juntar tudo e fazer uma sopa de letrinhas.
39+
40+
Irei demonstrar os códigos no artigo, caso necessário, você poderá verificar no [Gist](https://gist.github.com/leonardorifeli/9c12f94b109cb7859ca9).
41+
42+
## Dependência, sim você precisará dela.
43+
44+
Para trabalhar com o **Doctrine Annotation Reader**, será necessário possuir a dependência **"doctrine/common"**, conforme o arquivo **composer.json** abaixo:
45+
46+
<script src="https://gist.github.com/leonardorifeli/9c12f94b109cb7859ca9.js?file=composer.json"></script>
47+
<span class="space">&nbsp;</span>
48+
49+
## Desenvolvendo a classe da annotation.
50+
51+
Resumindo, esta classe será responsável pela **annotation**, ou seja, os atributos **públicos** da classe armazenarão informações que poderão ser informadas por quem irá consumir a **annotation** em questão. Segue abaixo o arquivo **PeopleAnnotation.php**, é a nossa annotation:
52+
53+
<script src="https://gist.github.com/leonardorifeli/9c12f94b109cb7859ca9.js?file=PeopleAnnotation.php"></script>
54+
<span class="space">&nbsp;</span>
55+
56+
Repare que, a classe em questão possui uma **annotation**, sendo ela **@Annotation**, isto é necessário para informar ao **Doctrine Annotation Reader** que a classe em questão, realmente é uma **annotation**.
57+
58+
## Consumindo a annotation
59+
60+
61+
![alt text](/uploads/2016/02/24-annotations/consumindo.gif "Using the annotation PeopleAnnotation")
62+
63+
Nesta etapa, iremos consumir a annotation **PeopleAnnotation** e informaremos os valores que a annotation disponibiliza.
64+
65+
Salientando, é possível consumir a annotation em:
66+
67+
* classes;
68+
* atributos;
69+
* métodos.
70+
71+
No exemplo abaixo, temos a classe **People**, que comsumirá a **PeopleAnnotation**:
72+
73+
<script src="https://gist.github.com/leonardorifeli/9c12f94b109cb7859ca9.js?file=People.php"></script>
74+
<span class="space">&nbsp;</span>
75+
76+
Repare que, a classe **People** está consumindo a **annotation** tanto na respectiva classe, quanto nos atributos e métodos.
77+
78+
## Vamos verificar a **People**. Finalizando a sopa de letrinhas
79+
80+
Nesta etapa final, iremos instanciar a classe **AnnotationReader** para lermos as **annotations** extraídas da classe **People** (que está consumindo a **PeopleAnnotation**).
81+
82+
Classes nativas utilizadas no exemplo:
83+
84+
* **[ReflectionClass()](http://php.net/manual/pt_BR/class.reflectionclass.php)**;
85+
* **[ReflectionObject()](http://php.net/manual/pt_BR/class.reflectionobject.php)**;
86+
* **[ReflectionProperty()](http://php.net/manual/pt_BR/class.reflectionproperty.php)**;
87+
* **[ReflectionMethod()](http://php.net/manual/pt_BR/class.reflectionmethod.php)**.
88+
89+
Abaixo o exemplo:
90+
91+
<script src="https://gist.github.com/leonardorifeli/9c12f94b109cb7859ca9.js?file=ReaderAnnotation.php"></script>
92+
<span class="space">&nbsp;</span>
93+
94+
## Resultado (você já deve ter executado os exemplos)
95+
96+
97+
![alt text](/uploads/2016/02/24-annotations/happy.gif "Using the annotation PeopleAnnotation")
98+
99+
<script src="https://gist.github.com/leonardorifeli/9c12f94b109cb7859ca9.js?file=result.txt"></script>
100+
<span class="space">&nbsp;</span>
101+
102+
## Referências
103+
104+
1. [Artigo sobre o assunto em inglês](http://masnun.com/2012/08/12/using-annotations-in-php-with-doctrine-annotation-reader.html)
105+
2. [Doctrine - Documentação oficial](http://doctrine-common.readthedocs.org/en/latest/reference/annotations.html)
106+
3. [Documentação oficial PHP.net](http://php.net/)
107+
108+
## Conclusão
109+
110+
A utilização de **annotation** pode facilitar diversas condições, salientando que, a necessidade de implementar **custom annotation** varia de situação. Use o bom senso de programador.
111+
112+
Quaisquer feedbacks serão bem-vindos, fique à vontade para comentar e/ou implementar alguma informação.
113+
114+
Até breve méros mortais e eternos aprendizes (todos somos).
3.69 MB
Loading
3.7 MB
Loading
Loading

0 commit comments

Comments
 (0)