PHP 是否有办法减少 class 和构造函数中参数声明和初始化的重复?

Does PHP have a facility to reduce the duplication of parameter declaration and initialization in the class and the constructor?

考虑在下面写 class:

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 次。有没有办法减少输入所有这些代码所需的工作?

在我看来,理想情况下我想要一些东西,我可以指定我需要在构造函数中初始化一次的参数,并且一些机制将继续并填充剩余的样板代码。

有这样的mechanism/code结构吗?

如果您使用的是 PHPStorm,您可以看看:

PhpStorm shortcut to generate constructor params functionality

我可以使用一些简单的快捷方式生成所有这些。我确定其他 IDE 具有相同的功能。

虽然在写这个问题时答案是“否”,但现在是“是”:Constructor Property Promotion 正是出于这个目的在 PHP 8.0 中添加的。

它的工作方式是在构造函数签名中列出 属性 可见性,并同时声明 属性 和参数。

因此您的整个示例将简化为:

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