Есть ли в 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 имеют такую же функцию.