#php #string #initialization #offset #notice
#php #строка #инициализация #смещение #УВЕДОМЛЕНИЕ
Вопрос:
Я пишу свой собственный калькулятор на PHP.
У меня проблема с моим кодом, потому что я не знаю, где я пытаюсь прочитать слишком далеко в строке. Итак, если кто-нибудь может меня просветить..
Точная ошибка, которую я получаю, это :
Примечание PHP: Смещение неинициализированной строки: 4 дюйма /home/salim/Bureau/web/piscine_php/d01/ex11/do_op_2.php в строке 76
Вот приведенный ниже код :
function decoupe ($argv)
{
global $nbr1;
global $nbr2;
global $sign;
$string = NULL;
$string = trim($argv[1], " t");
echo $string;
echo "n";
$x = 0;
while($string[$x])
{
if (is_numeric($string[0]) == false)
error_msg();
if (is_numeric($string[$x]) amp;amp; $string[$x 1])
{
while (is_numeric($string[$x]))
{
$nbr1 .= $string[$x];
$x ;
}
}
if (is_thisoperator(substr($string, $x)))
{
$sign .= $string[$x];
$x ;
}
else
{
error_msg();
}
if ($string[$x 1] amp;amp; is_numeric($string[$x]))
{
while (is_numeric($string[$x]))
{
$nbr2 .= $string[$x];
$x ;
}
}
else
{
error_msg();
}
}
Комментарии:
1. В какой строке выдается ошибка?
2. оно выглядит следующим образом: if ($string[$x 1] amp;amp; is_numeric($string[$x]))
3. Если вы хотите создать удобный арифметический вычислитель, при этом удаляя минимальное количество волос, вам нужно будет ознакомиться с алгоритмом маневровой площадки .
Ответ №1:
Не используйте $string[$x]
как способ проверить, $x
является ли в строке допустимый индекс. Он выводит предупреждение, когда $x
находится за пределами строки. Используйте $x < strlen($string)
вместо этого. Итак, измените:
while ($string[$x])
Для
while ($x < strlen($string))
и изменить
if ($string[$x 1] amp;amp; is_numeric($string[$x]))
Для
if ($x 1 < strlen($string) amp;amp; is_numeric($string[$x]))
Комментарии:
1. Большое вам спасибо за ваш ответ 🙂 Но я хотел бы знать, есть ли разница в этом отношении между языком C и PHP, потому что на C я кодирую подобным образом, и я действительно не сталкиваюсь с проблемой, пока не узнаю..
2. В C в конце строки есть нулевой символ, и это то, что ищет этот тип теста. В PHP этого нет.