В новой версии php начали выскакивать предупреждение: Notice: Undefined variable: color_p in C:\capcha.php on line... Кусок кода капчи: Код (Text): function rev(&$im,$x,$y)//функция реверсии цвета { global $color_w,$color_g; $w=$h=rand(15,30); for($i=$x-$w/2;$i < $x+$w/2;$i++) for($k=$y-$h/2;$k < $y+$h/2;$k++,$color_p=imagecolorat($im,$i,$k)) if($color_p>$color_w) imagesetpixel($im,$i,$k,$color_w); else imagesetpixel($im,$i,$k,$color_g); } Чтобы как то подправить это, изменил эту строку if($color_p>$color_w) на эту if(isset($color_p) && $color_p>$color_w) Корректно ли такое изменение? Или может как то по-другому лучше подправлять. Таких условий где надо дополнять isset($var) && ... очень много. Например так, где было это if($var == 1), надо менять на это if(isset($var) && $var == 1). Эта переменная может быть а может не быть. Если её нету то новая php версия выводит предупреждение. В старой такого не было.
Нужна переменная? Возьми за привычку перед ее использованием, где-то в начале функции/метода/простыни, объявить ее с пустым значением. Или поставь себе тот же phpStorm - он сразу показывает места, где происходят попытки чтения из переменной, существование которой подвластно лишь теории вероятности. При этом, если перед использованием переменной поставить isset на нее, не важно где и как, главное, чтобы он был частью конструкции, открывающей блок кода, Шторм перестанет ругаться, мол, все ок - проверка стоит, поведение кода вышло из состояния неопределенности. Конечно, есть третий путь - if (@(a==1)) { }. Но код, имхо, должен быть такой, чтобы вообще не ругался при E_ALL и не опирался на @. Такие вещи как болезнь, их надо лечить по принципу "нашел причину - устранил", а не "не вижу, значит не было".