更加緊密我對PHP相當陌生,只是有一種學習體驗,我在這裏分享以幫助像我這樣的其他人,可能需要幫助以找到此原因錯誤,也因爲我仍然不知道解決方案是什麼,並且確定只有一種我尚未發現的語法來完成我需要做的事情。PHP:非法字符串偏移,因爲[]綁定比 - >
所以,這個問題可以通過這樣的事情來證明:
class Sample {
protected $foo = array();
public function magicSampleSetFunc($property, $key, $value) {
$this->$property[$key] = $value;
}
}
...
$s = new Sample();
$s->magicSampleSetFunc('foo', 'someKey', 'someVal');
很顯然,這不是我真正的代碼(我也沒有運行),這只是一個小例子,說明我的情況。這裏我們有一個成員變量foo,它顯然是一個數組和一個泛型函數,它將嘗試設置一個鍵和值。我可以var_dump $this->$property
,看到它是一個數組,但在$this->$property[$key]
行我得到錯誤消息:「警告:非法字符串偏移'someKey'在...」。
起初我雖然說'someKey'是一個非法的字符串,用作數組偏移量,這是沒有意義的。而且,即使我將它包裝在isset中,它也會抱怨。我學到的第一件事是,如果你在php中有一個字符串,你可以使用數組訪問操作符從字符串中獲取一個字符。所以警告消息實際上是抱怨'someKey'不是一個字符串的有效偏移量(因爲它不是一個整數偏移量)。好吧,但我只是var_dumped $this->$property
,看到它是一個數組,所以給了什麼?第二課是運營商優先級之一。數組運算符「[]」比間接運算符「 - >」綁定更緊密。所以,該聲明的綁定實際上是這樣的:($this-> ($property[$key]))
。所以,它非法嘗試通過$ key中的索引來抵銷$ property中的字符串。我想要的是通過$ key中的索引抵消$this->$property
中的數組。
所以,現在我們來看我的問題。我需要學習的第三課,還沒有弄清楚是如何覆蓋這個運算符優先級問題?我試過,但似乎是一個sytax錯誤。有沒有其他的語法可以讓翻譯者理解我的意思?或者,我必須先將$this->$property
分配給臨時變量嗎?如果我這樣做,這不是說我的實際成員變量數組沒有更新?我需要臨時參考嗎?這裏我的情況是什麼正確的語法?謝謝!
結束。如果這不是你真正的代碼,而你還沒有運行它,然後你怎麼這麼肯定它代表你的問題? (提示:不是。)首先發布你的真實代碼和任何錯誤信息,所以我們可以給你一個更具體的答案。 – 2013-05-12 23:21:08
沒有看到我真實的代碼,你怎麼知道這不是它的代表?我真正的代碼是很多很多文件,無論我發佈什麼內容,都必須是真實內容的總結,而且總會有我錯誤總結的危險。我覺得這是我正在使用的代碼的精確彙總。我邀請您根據此代碼中的問題來回答問題,如果這不是我的實際問題,因爲我錯誤地總結了那個問題。 – 2013-05-13 00:12:04