Обращение в 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 - это ведь очепятка, верно?