PHP 中是否有像现在 C# 中那样的特殊对象初始值设定项构造?

2022-08-30 17:14:05

我知道在C#中,你现在可以做到:

var a = new MyObject
{
    Property1 = 1,
    Property2 = 2
};

PHP中也有类似的东西吗?或者我应该通过构造函数或通过多个语句来做到这一点;

$a = new MyObject(1, 2);

$a = new MyObject();
$a->property1 = 1;
$a->property2 = 2;

如果这是可能的,但每个人都认为这是一个可怕的想法,我也想知道。

PS:对象只不过是一堆属性。


答案 1

从 PHP7 开始,我们有匿名类,它允许您在运行时扩展一个类,包括设置其他属性:

$a = new class() extends MyObject {
    public $property1 = 1;
    public $property2 = 2;
};

echo $a->property1; // prints 1

在 PHP7 之前,没有这样的东西。如果想法是使用任意属性实例化对象,则可以执行以下操作

public function __construct(array $properties)
{
    foreach ($properties as $property => $value) 
    {
        $this->$property = $value
    }
}

$foo = new Foo(array('prop1' => 1, 'prop2' => 2));

根据需要添加变体。例如,将检查添加到 仅允许设置已定义的成员。我发现向对象抛出随机属性是一个设计缺陷。property_exists

如果你不需要一个特定的类实例,但你只需要一个随机的对象包,你也可以做

$a = (object) [
    'property1' => 1,
    'property2' => 2
];

然后,它将为您提供一个StdClass的实例,您可以将其作为访问

echo $a->property1; // prints 1

答案 2

我建议您在初始化对象时使用构造函数并设置所需的变量。


推荐