我遇到了一个有趣的问题。在使用 [] 的同一操作中创建数组属性并为其分配值似乎出错了。
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;
给你一个通知:
确保你有你的错误报告 turned on 。
关于PHP魔术方法__get和[]使值消失,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30196003/