【发布时间】:2026-01-11 19:10:01
【问题描述】:
我遇到了一个有趣的问题。在同一操作中使用 [] 创建一个数组属性并为其赋值似乎会出错。
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); - 它工作得很好。但我想了解情况并有一个通用的解决方案,而无需先初始化数组。有没有办法解决这个问题?
【问题讨论】:
-
您有错误报告吗?
-
您尝试在创建之前写入
$testArr。如果您在第一次写入之前从testArr阅读,它会起作用:3v4l.org/1ED6K
标签: php arrays properties get