Não sou desenvolvedora PHP e não sei vou conseguir ajudar esclarecer esse ponto, porém, até onde eu entendi os Decorators
do TypeScript
se referem não apenas a uma funcionalidade, mas também a uma forma de implementar o Padrão de Projeto Decorator.
Sobre o Padrão de Projeto Decorator temos, na Wikipedia:
Decorator, wrapper (ou em português Decorador), é um padrão de projeto de software que permite adicionar um comportamento a um objeto já existente em tempo de execução, ou seja, agrega dinamicamente responsabilidades adicionais a um objeto. Decorators oferecem uma alternativa flexível ao uso de herança para estender uma funcionalidade, com isso adiciona-se uma responsabilidade ao objeto e não à classe.
O que casa muito bem com que encontramos na documentação do TypeScript a respeito dessa funcionalidade:
With the introduction of Classes in TypeScript and ES6, there now exist certain scenarios that require additional features to support annotating or modifying classes and class members. Decorators provide a way to add both annotations and a meta-programming syntax for class declarations and members.
[...]
A Decorator is a special kind of declaration that can be attached to a class declaration, method, accessor, property, or parameter. Decorators use the form @expression, where expression must evaluate to a function that will be called at runtime with information about the decorated declaration.
Pensando nesses pontos e dando uma pesquisada, vi que o PHP implementa algo semelhante aos Decorators do TS, mas que tem o nome de Annotations. Segundo a documentação do PHP:
Annotation** is a form of syntactic metadata that can be added to source code. Annotations can be embedded in and read using reflection mechanism. Annotations are known from Java or so-called Attributes in C# and can be retained by VM at **run-time and read via reflection. Annotations can be placed in classes, methods, properties and functions.
[...]
Which can be used to annotate classes, properties, methods and functions. They look similar to new object instantiation but there is a wide range of inhibitions. Annotations can have named and/or unnamed parameters, they're name can be imported using use statement same way as class names but the place they're declared must use @ prefix. The same as instantiating new object parenthesis is not obligatory if there are no parameters to pass. Unnamed parameters must exist at the beginning of parameters list and they must meet constructor parameter requirements.
Acredito que o que temos de mais próximo de Helpers
em JS/TS
é Utils
, onde ficam as funções ou métodos utilitários que podem ser utilizados em vários pontos do código. Não regra e já encontrei ambos em projetos.
Não sei ajudei ou se te deixei mais confusa, mas talvez o professor do curso possa esclarecer um pouco mais esse ponto para você. Vou deixar alguns links que possam te interessar e conhecer mais sobre o assunto:
- Padrão de Projeto Decorator
- TS - Decorators
- PHP Annotations - Mágica ou puramente código?
- Using the Decorator Design Pattern in PHP: esse ensina a implementar o padrão Decorator sem Annotations
- Documentação PHP - Annotations