在PHP中是否有一个特殊的对象初始化器构造,就像现在在C#中一样?

Mat*_*els 22 php oop constructor initialization

我知道在C#中你现在可以这样做:

var a = new MyObject
{
    Property1 = 1,
    Property2 = 2
};
Run Code Online (Sandbox Code Playgroud)

在PHP中也有类似的东西吗?或者我应该通过构造函数还是通过多个语句来完成它;

$a = new MyObject(1, 2);

$a = new MyObject();
$a->property1 = 1;
$a->property2 = 2;
Run Code Online (Sandbox Code Playgroud)

如果可能,但每个人都认为这是一个糟糕的主意,我也想知道.

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

Gor*_*don 16

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

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

echo $a->property1; // prints 1
Run Code Online (Sandbox Code Playgroud)

在PHP7之前,没有这样的东西.如果想要用任意属性实例化对象,你可以这样做

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

$foo = new Foo(array('prop1' => 1, 'prop2' => 2));
Run Code Online (Sandbox Code Playgroud)

根据需要添加变体.例如,添加检查以property_exists仅允许设置已定义的成员.我发现在设计缺陷的对象上抛出随机属性.

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

$a = (object) [
    'property1' => 1,
    'property2' => 2
];
Run Code Online (Sandbox Code Playgroud)

然后会给你一个StdClass的实例,你可以访问它

echo $a->property1; // prints 1
Run Code Online (Sandbox Code Playgroud)

  • 谢谢.这个想法不是为了让人们了解各种特征.无论如何,谢谢你的想法.我将使用我的第一个替代方案:构造函数. (2认同)