У меня есть вопрос о поведении, которое я только что отлаживал, в частности, что происходит, если переменной, которая уже установлена, присваивается неопределенное значение. Я просто хочу проверить, правильно ли я понимаю, что случилось. Если для переменной уже установлено значение, и вы пытаетесь установить для нее что-то неопределенное, она останется со своим старым значением?
В частности, у меня был некоторый 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. Таким образом, мой оператор if (! empty не выполняет свою работу, а case 'bar' встречается чаще, чем следовало бы. Похоже, все это происходит так?
Конечно, обрезка $ string решила мою проблему, но я хочу убедиться, что понимаю, что происходит не так. Извиняюсь, если это глупый вопрос - я просто любитель здесь ...
Редактировать: вот фактический код. Предполагается, что $ 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. Поэтому он пытался запустить этот блок кода в операторе if () с пустым значением $ name или значением NULL или чем-то еще. И если бы я намеренно добавил 3 или 4 лишних пробела, я увидел бы столько ошибок mysql.