Matthijs Wessels Matthijs Wessels - 1 year ago 59
PHP Question

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

I know that in C# you can nowadays do:

var a = new MyObject
Property1 = 1,
Property2 = 2

Is there something like that in PHP too? Or should I just do it through a constructor or through multiple statements;

$a = new MyObject(1, 2);

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

If it is possible but everyone thinks it's a terrible idea, I would also like to know.

PS: the object is nothing more than a bunch of properties.

Answer Source

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
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download