我有一些问题,我只是在调试,特别是如果一个已经设置的变量分配给一个未定义的值会发生什么。我只是想检查我是否了解发生了什么。如果一个变量已经设置了一个值,并且您尝试将其设置为未定义的值,它会保持原来的值吗?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