不调用对象的设置器


setter of objects is not called

我有以下问题:

我正在处理的应用程序的当前代码包含大量定义,如下所示:

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

这导致:PHP 严格标准:从 [某处] 中的空值创建默认对象。

正确的形式是:

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

现在的问题是:在整个代码中替换它需要很长时间(考虑数千种情况,有条件等)。

所以我正在考虑用自定义对象替换 stdClass(这将是代码中的简单替换),为它创建一个 setter,用于验证变量属性是否为对象,并在设置第二个属性之前将其定义为对象。

所以我们得到:

class MockObject() {
    public function __set($property, $value) {
        // Do stuff here
    }
}
$obj = new MockObject();
$object->a->b = "something";

问题是,当执行$object->a->b = "something"时;setter不会被调用(因为你实际上并没有设置a属性,而是b属性)。

有什么办法吗?还是其他解决方案可能?

注意:显式调用 __set() 方法不是解决方案,因为它与将属性定义为 stdClass() 相同。

你知道魔术二传手。也使用魔法吸气剂。

如果它想要获取一个不存在的 var:创建一个(在数组或类似的东西中)作为该类的实例。

为什么不在A class的构造函数中初始化b变量?

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