Getter и Setter v1.0.1
Accessors #[Getter] и #[Setter] через lombok-php на AbstractWith.
Введение
AbstractWith наследует \Lombok\Helper. Атрибуты #[Getter] и #[Setter] принадлежат пакету marcin-orlowski/lombok-php, не Dev Tools. Этот гайд описывает только интеграцию.
Полный контракт атрибутов: lombok-php attributes.
Предварительные требования
Пошаговое руководство
use Lombok\Getter;
use Lombok\Setter;
use Devcraft\Abstracts\AbstractWith;
use Devcraft\Attributes\With;
#[Getter]
final class Query extends AbstractWith
{
#[With]
private ?int $page = null;
#[Setter]
private bool $visible = false;
}
$query = (new Query())->withPage(2);
$query->getPage(); // 2
$query->setVisible(true);
$query->isVisible(); // truewithPage() идёт в WithHandler. getPage() / setVisible() / isVisible() — в Lombok.
Класс vs свойство
Атрибуты ставятся на класс или на свойство.
- На классе: accessors для всех подходящих свойств.
publicиstaticмолча пропускаются.#[Setter]также пропускаетreadonly. - На свойстве: только это свойство.
public/static/readonly(для Setter) бросают исключение.
Если на свойстве уже есть #[Getter] или #[Setter], классовый scope на это свойство не накладывается. Так можно сузить набор accessors:
use Lombok\Getter;
use Lombok\Setter;
#[Setter, Getter]
final class Entity extends AbstractWith
{
#[Getter]
private int $id = 0;
private ?string $name = null;
}$name получит getName() и setName(). $id — только getId().
#[With] / #[WithItem] не считаются accessor-атрибутами Lombok. Классовый #[Getter] спокойно соседствует с #[With] на том же свойстве.
Именование
Имена — StudlyCase от свойства: $starting_after → getStartingAfter() / setStartingAfter().
Если единственный тип свойства — bool, геттер называется isVisible(), не getVisible(). Union с bool использует обычный get.
set* возвращает $this (цепочка).
Конструктор
Helper вызывает Lombok::construct($this) в __construct(). Если наследник объявляет свой конструктор:
public function __construct()
{
parent::__construct();
}Без parent::__construct() методы with* работают сразу. Getter/Setter подключатся при первом lombok-__call (или не подключатся, пока вы не вызовете get*/set*).
Для readonly класса lombok требует \Lombok\HelperReadonly, не Helper. AbstractWith наследует обычный Helper — readonly-классы через него не проводятся. Readonly свойства Setter на уровне класса пропускает.
Ограничения
- Магические методы не реализуют методы интерфейса.
- IDE не видит
get*/set*без@methodв PHPDoc. - Коллизия с реальным методом: на свойстве — исключение; на классе — исходный метод остаётся, accessor не создаётся.
См. также: AbstractWith, атрибуты With.