我遇到了一個有趣的問題。使用[]在同一個操作中創建一個數組屬性並賦值給它似乎出錯了。PHP魔法__get和[]讓價值消失
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); - 它工作得很好。但是我想了解這種情況並且有一個通用的解決方案,而不需要首先啓動陣列。有沒有辦法解決這個問題?
您有錯誤報告? – AbraCadaver
您嘗試在創建之前寫入'$ testArr'。如果您在第一次寫入之前從'testArr'讀取:http://3v4l.org/1ED6K,它會起作用 – Rangad