gpt4 book ai didi

php - PHP 中是否有像现在 C# 中那样的特殊对象初始化器构造?

转载 作者:IT王子 更新时间:2023-10-28 23:53:42 26 4
gpt4 key购买 nike

我知道在 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:对象无非是一堆属性。

最佳答案

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

$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

关于php - PHP 中是否有像现在 C# 中那样的特殊对象初始化器构造?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3837924/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com