我遇到了一个有趣的问题。使用 [] 在同一操作中创建数组属性并为其赋值似乎出错了。
class T
{
public function __get($property)
{
if (!isset($this->{$property}))
{
$this->{$property} = array();
}
return $this->{$property};
}
public function __set($key, $val)
{
$this->{$key} = $val;
}
}
$testObj = new T();
$testObj->testArr[] = 1;
$testObj->testArr[] = 2;
$testObj->testArr[] = 3;
var_dump($testObj->testArr);
输出如下:
array(2) { [0]=> int(2) [1]=> int(3) }
于是1真的像戴帽子的兔子一样神奇地消失在了数组初始化中。如果我在分配之前尝试所有 $testObj->testArr 或者甚至将 1 分配为 $testObj->testArr = array(1); - 它工作得很好。但我想了解情况并有一个通用的解决方案,而不需要先初始化数组。有办法解决这个问题吗?
最佳答案
$testObj->testArr[] = 1;
给你一个通知:
Notice: Indirect modification of overloaded property T::$testArr has no effect in test.php on line 24
确保你有错误报告turned on .
关于PHP魔术方法__get和[]使值消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30196003/