我遇到了一个有趣的问题。在使用 [] 的同一操作中创建数组属性并为其分配值似乎出错了。

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/

10-11 18:03