2013-09-27 53 views
1

因此,我在創建Google產品Feed時收到了一條通知。 通知是 「下面的PHP通知已經發生今天的_網站4989次: PHP公告:未定義指數:0 /xxx/Status.php在線583」string'w32'== 0在php中評估爲true。是吧?

這是在代碼該類

public function inStockLocally($productcode) 
{ 
    if($this->_status[$productcode]['status'] == self::IN_STOCK) { 
     return $this->_status[$productcode]['in_stock_local']; 
    } 
    return false; 
} 

的函數得到一個$產品代碼= 0,但產品代碼是逸岸「W32」,所以關鍵是不存在的。

向上調用函數的堆棧我把它放進去,以便打破繁瑣的產品。

if ($productcode == 0) { 
     $test = 'breakhere'; 
    } 

使用NetBeans和螢火蟲,它打破了上線的時候$產品代碼= 'W32'

所以我的問題是,爲什麼 'W32' == 0評價爲真? 它也正在評估與其他類似的結構代碼,如'h94'。

任何幫助,將不勝感激,因爲部門中沒有人可以找出爲什麼會發生這種情況。

我想我沒有把足夠的信息在q中。兩件事情正在進行。 1.'w32'由於某種原因轉換爲數字= 0。 2.當productcode的結構爲'x ##'時,[0]被插入到數組中;

+0

相關:http:// stackoverflow。com/questions/15813490/php-type-juggling-and-strict-greater-less-than-comparisons/15820372#15820372 –

回答

0

我在這裏有點新東西,所以請原諒,如果這不是您所期望的答案,但PHP會進行大量的自動類型轉換。因此,任何不以數字字符(0..9,+, - 等)開頭的字符串都會計爲零。

+0

好的,謝謝你有道理,但爲什麼它會注入0作爲$ this - > _ status [0] ['狀態']在這種情況下,沒有進行比較。請注意,我的PHP的通知是說,索引0是不確定的,當它應該說索引'W32'是未定義的。 (實際上是被定義的,但這僅僅是爲了爭辯。) –

+0

規則不能總是成立,因爲產品代碼'cat2011'從不= 0。 –

-1

「如果你比較多個具有一個字符串或比較涉及數字串,則每一個字符串被轉換爲數字和數值進行比較。」

http://php.net/manual/en/language.operators.comparison.php

此外,我想你有一個索引數組,儘管您期望它是一個關聯數組:

array()函數用於創建數組。

在PHP中,有三種類型的數組:

索引數組 - 與數字索引 關聯數組陣列 - 包含索引數組一個或多個陣列 語法 語法陣列 - 與名爲鍵 多維數組陣列:

數組(value1,value2,value3等);

語法關聯數組:

陣列;(密鑰=>值,密鑰=>值,密鑰=>值,等)。

+0

[請不要鏈接到或使用w3schools。這是一個可怕的參考充滿了不正確的信息,有時甚至會導致安全漏洞。](http://w3fools.com)例如,他們不知道鮑比表... – ThiefMaster

+0

好的,謝謝你的提示。我沒有意識到這一點。不過,我發現在這種情況下,他們以簡明的方式解釋了數組類型之間的差異,這是我在其他地方找不到的。例如,手冊頁http://php.net/manual/en/language.types.array.php沒有以任何有用的方式定義這種差異。 –

+0

問題是,他們確實有幾頁可能不錯。但是,一個PHP初學者最終會在'http:// www.w3schools.com/php/php_mysql_insert.asp'上寫出代碼 - 並且寫入代碼與gaping sql注入漏洞 – ThiefMaster

相關問題