我有一些問題,我只是在調試,特別是如果一個已經設置的變量分配給一個未定義的值會發生什麼。我只是想檢查我是否瞭解發生了什麼。如果一個變量已經設置了一個值,並且您嘗試將其設置爲未定義的值,它會保持原來的值嗎?PHP設置賦值變量爲undefined - 保持不變 -
具體來說,我有一些PHP代碼看起來像這樣 - 假設$ string是一些1和2的字符串。現在
$array = array(1 => 'foo', 2 => 'bar');
for($count=0;$count<len($string);$count++)
{
$newvar = $array[$string[$count]];
if(!empty($newvar))
{
switch($newvar)
{
case 'foo':
// blah blah break;
case 'bar':
// blah blah break;
}
}
}
,我的代碼應該設置$ string要像「12212」,但由於我的錯誤是在年底將其發送與多餘的空格的東西 - 「12212」。這導致了一些異常的行爲,我認爲發生了什麼 - 當$ count = 5,$ string [5]是未定義的,所以$ array [$ string [5]]是未定義的,$ newvar保持爲2.因此,我的如果(!空語句沒有做它的工作和案例'酒吧'發生了更多的時間比它應該有。這似乎會發生什麼?
當然,修剪$字符串解決了我的問題,但我想以確保我明白什麼是錯誤的道歉,如果這是一個愚蠢的問題 - 我只是一個業餘愛好者在這裏...
編輯:這是實際的代碼$ upstr應該是一串數字。
$len = strlen($upstr);
$cost=0;
$upnames = array(4=>"man", 2=>"raw", 1=>"food", 3=>"fuel",5=>"tech");
for($strloop=0;$strloop<$len; $strloop++)
{
$number = $upstr[$strloop];
if(! empty($number))
{
$name = $upnames[$number];
$cost+= mysql_result($result1,0,$name) +1;
if(mysql_result($result2,0,$name."up")==1)
{
$cost+=100;
}
}
}
當$ upstr在最後有一些額外的空格時發生了什麼,我會看到一個mysql錯誤,它無法在$ result2中找到列「up」。所以它試圖在$ name爲空或者NULL的if()語句中運行該代碼塊。如果我有意添加3或4個額外的空格,我會看到很多mysql錯誤。
謝謝 - 剛剛糾正了原來的問題。所以如果$ newvar是NULL,那麼我的if(!empty($ newvar))語句應該已經跳出了交換機?它似乎並不是...... – coolpapa 2011-03-22 08:56:28
是的,當$ newvar爲NULL時,空($ newvar)應計算爲true,但恕我直言,以下解決方案將更清潔:if(empty($ newvar)){break ; } – 2011-03-22 09:00:30
奇怪,因爲我得到的錯誤告訴我交換機實際上正在發生......應該發佈我的實際代碼嗎? – coolpapa 2011-03-22 09:13:05