Обращение в PHP к магическому методу __get() как к элементу двумерного массива

Подскажите, пожалуйста, по следующему поводу. Я вычитал, что через магический метод __get могу обращаться к несуществующему полю класса. А что, если это поле представляет собой двумерный массив? Могу ли я использовать что-то вроде такого?

$object->xyzw->prop2;

И если могу, что в таком случае необходимо поменять в методе __get для полноценной работы?

class Object {
    private $property;
    
    public function __contructor() {
        // for example
        $this->property['xyzw']['prop1'] = 2;
        $this->property['xyzw']['prop2'] = 3;
        $this->property['abcd']['prop3'] = 4;
        $this->property['abcd']['prop4'] = 5;
    }
    
    public function __get($property) {
        return $this->property[$property];
    }
}

Спасибо!


Ответы (1 шт):

Автор решения: Kirill

Через магический метод __get невозможно обращаться к несуществующему полю класса, если нет сеттера __set. В вашем случае это обращение к приватному свойству (полю)

class Obj {
    private $prop = [];

    public function __construct() {
        // for example
        $this->prop = [
            'xyzw' => [
                'prop1' => 2
            ]
        ];
    }

    public function __get($prop) {
        if (array_key_exists($prop, $this->prop)) {
            return $this->prop[$prop];
        }
    }

    public function __set($name, $value) {
        $this->{$name} = $value;
    }
}

$o = new Obj();

$o->qwe = 777; // __set in action

echo $o->qwe; // __get in action

print_r($o->xyzw['prop1']); // __get in action

З.Ы. Не используйте слова Object / property, они зарезервированны в PHP;

__contructor - это ведь очепятка, верно?

→ Ссылка