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

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

withPage() идёт в 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_aftergetStartingAfter() / 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.

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

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