Is there a special object initializer construct in PHP like there is now in C#?

后端 未结 4 1195
抹茶落季
抹茶落季 2020-12-17 08:33

I know that in C# you can nowadays do:

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

Is there something like that in PHP t

4条回答
  •  旧巷少年郎
    2020-12-17 09:14

    As of PHP7, we have Anonymous Classes which would allow you to extend a class at runtime, including setting of additional properties:

    $a = new class() extends MyObject {
        public $property1 = 1;
        public $property2 = 2;
    };
    
    echo $a->property1; // prints 1
    

    Before PHP7, there is no such thing. If the idea is to instantiate the object with arbitrary properties, you can do

    public function __construct(array $properties)
    {
        foreach ($properties as $property => $value) 
        {
            $this->$property = $value
        }
    }
    
    $foo = new Foo(array('prop1' => 1, 'prop2' => 2));
    

    Add variations as you see fit. For instance, add checks to property_exists to only allow setting of defined members. I find throwing random properties at objects a design flaw.

    If you do not need a specific class instance, but you just want a random object bag, you can also do

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

    which would then give you an instance of StdClass and which you could access as

    echo $a->property1; // prints 1
    

提交回复
热议问题