[PHP] PHP 7.x PHP 8.x에서의 조건문
if ($a < 0) echo __function($a);
위와 같은 PHP 코드가 문제를 일으켰다.
Comparison | Before | After ------------------------------ 0 == "0" | true | true 0 == "0.0" | true | true 0 == "foo" | true | false 0 == "" | true | false 42 == " 42" | true | true 42 == "42foo" | true | false
$a 값이 "" 인경우 PHP 8.x 에서는 ($a < 0) 가 true 가 되어 ___func($a)가 수행되는 문제가 발생
if ((int)$a < 0) echo __function($a);
처럼 int로 변환후 비교하도록 수정해서 처리 ㅠ.ㅠ
PHP 에서 조건문에 empty 를 이용한 파라미터 검사 같은경우 문제가 많음.
파라미터가 있다 없다를 isset으로 검사하는 게 문제가 될 수 있음.
디폴트 값이 0 또는 "" 가 같이 false로 처리되는데
0의 경우는 값을 입력한 것으로도 봐야 되기 때문에 파라미터가 있다없다의 경우는 strlen($a)로 처리하는 것이 좋을 것 같다.
default 값의 경우 0을 왠만하면 안쓰는게 좋을 것 같다.. 그러면 그냥 empty로 해결될 수 있음 ^.^ 그러나 현실은 0이 대부분이라...
function pOk($p)
{
return strlen($p);
}
처럼 만들어 사용하는 것이 무난한 방법이 될 듯.