DevCraft Документации
Руководства

Getter и Setter v1.1.0

Как #[Getter] и #[Setter] из lombok-php работают вместе с AbstractWith.

Введение

AbstractWith наследует \Lombok\Helper. Атрибуты #[Getter] и #[Setter] принадлежат пакету marcin-orlowski/lombok-php, не Dev Tools. Здесь только стыковка: with* — наш WithHandler, get* / set* / is* — Lombok.

Полный контракт атрибутов: документация lombok-php.

Предварительные требования

Пример

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();   // true

withPage() идёт в WithHandler. getPage() / setVisible() / isVisible() — в Lombok.

Класс или свойство

Атрибуты ставят на класс или на свойство.

  • На классе: методы для всех подходящих свойств. public и static молча пропускаются. #[Setter] также пропускает readonly.
  • На свойстве: только это свойство. Неверные public / static / readonly (для Setter) бросают исключение.

Если на свойстве уже есть свой #[Getter] или #[Setter], классовый атрибут на это свойство не накладывается. Так сужают набор методов:

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] не считаются атрибутами Lombok. Классовый #[Getter] спокойно соседствует с #[With] на том же свойстве.

Имена

StudlyCase от свойства: $starting_aftergetStartingAfter() / setStartingAfter().

Если единственный тип свойства — bool, геттер называется isVisible(), не getVisible(). В объединении с 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 свойства классовый Setter пропускает.

Ограничения

  • Магические методы не закрывают методы интерфейса.
  • IDE не видит get* / set* без @method в PHPDoc.
  • Столкновение с реальным методом: на свойстве — исключение; на классе — остаётся ваш метод, accessor не создаётся.

См. также: AbstractWith, атрибуты With.

Связанные разделы

На этой странице