oop — сеттер объектов не вызывается

У меня есть следующая проблема:

Текущий код приложения, над которым я работаю, содержит очень много определений, подобных этому:

$obj = new stdClass();
$obj->a->b = "something";

Это приводит к: PHP Строгие Стандарты: Создание объекта по умолчанию из пустого значения в [где-то].

Правильная форма будет:

$obj = new stdClass();
$obj->a = new stdClass();
$obj->a->b = "something";

Теперь проблема: замена этого во всем коде заняла бы много времени (рассмотрим тысячи случаев, с условиями и т. Д.).

Поэтому я думал о замене stdClass на собственный объект (это будет простая замена в коде), создание для него установщика, который проверяет, является ли свойство переменной объектом, и определяет его как объект, если он задан до установки второго свойства. ,

Итак, мы получаем:

class MockObject() {
public function __set($property, $value) {
// Do stuff here
}
}

$obj = new MockObject();
$object->a->b = "something";

Проблема в том, что при выполнении $ object-> a-> b = «что-то»; setter не вызывается (потому что на самом деле вы устанавливаете не свойство a, а свойство b).

Есть ли способ обойти это? Или возможно другое решение?

Примечание: явный вызов метода __set () не является решением, поскольку он будет таким же, как определение свойств как stdClass ().

0

Решение

Вы знаете о волшебном сеттере.
Используйте также магический добытчик.

Если он хочет получить несуществующую переменную: создайте ее (в массиве или что-то в этом роде), которая является экземпляром этого класса.

3

Другие решения

Почему бы вам не инициализировать свой b переменная в конструкторе A class ?

 public function __construct()
{
$this->b = new B();
}
0

По вопросам рекламы [email protected]