php - 没有调用对象的setter

时间:2015-01-27 10:38:49

标签: php oop object setter getter-setter

我有以下问题:

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

$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()相同。

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

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

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