Есть ли в PHP средство для сокращения дублирования объявления и инициализации параметров в классе и конструкторе?

Попробуйте написать класс ниже:

class SomeClass
{

    /** @var array */
    private $files;

    /** @var string */
    private $productName;

    /** @var bool */
    private $singlePage;

    /** @var bool */
    private $signatureRequested;

    function __construct(array $files, string $productName, bool $singlePage, bool $signatureRequested = true)
    {
        $this->files = $files;
        $this->productName = $productName;
        $this->singlePage = $singlePage;
        $this->signatureRequested = $signatureRequested;
    }

}

$files, а другие параметры перечислены 4 раза - вы должны ввести имя параметра, а затем скопировать и вставить его или ввести его 3 раза в приведенный выше код шаблона котла. Есть ли способ уменьшить работу, которая требуется, чтобы напечатать весь этот код?

Мне кажется, что в идеале я бы хотел что-то, где я мог бы указать параметры, которые мне нужно инициализировать в конструкторе, только один раз, и какой-то механизм запустит оставшийся шаблонный код.

Есть ли такой механизм / конструкция кода?

2 ответа

Решение

Хотя на момент написания этого вопроса ответ был «нет», теперь он «да»: в PHP 8.0 было добавлено продвижение свойств конструктора именно для этой цели.

Это работает так: вы указываете видимость свойства внутри сигнатуры конструктора, и он объявляет и свойство, и параметр одновременно.

Таким образом, весь ваш пример сводится к следующему:

      class SomeClass
{
    function __construct(
        private array $files,
        private string $productName,
        private bool $singlePage,
        private bool $signatureRequested = true
    ) { }
}

Если вы используете PHPStorm, вы можете взглянуть на:

Ярлык PhpStorm для создания функциональности параметров конструктора

Я могу создать все это с помощью нескольких простых ярлыков. Я уверен, что другие IDE имеют такую ​​же функцию.

Другие вопросы по тегам