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)