PHP에서 재미있는 버그를 만드는 문자 위치 오류
8206 단어 php
좋아 보이는 스니펫에 너무 많은 시간을 할애할 수 있지만 예상한 결과를 얻지 못하고 마침내 어딘가에서 놓친 작은 것을 발견할 수 있습니다.
다음은 작업할 때 더 신중하게 만든 PHP에 대한 몇 가지 사실 목록입니다.
1. 조건 결과에 관계없이 항상 실행 중이면 참인지 아닌지에 대한 설명
$age= 17;
if( $age > 18 ); {
echo ‘you can get a license’;
}
이 사람이 면허를 취득할 수 없다고 생각할 수도 있지만 틀렸습니다.
PHP는 이 스니펫을 다음과 같이 이해합니다.
$a = 17;
if( $a > 18 ) {
}
{
echo ‘you can get a license’;
}
빈 문이 있는 동안 세미콜론이 if 블록을 닫기 때문입니다.
2. 확실히 잘못된 조건이 있지만; true가 반환됩니다.
function should_wear_a_hat($is_raining, $is_snow_comming)
{
$wear_a_hat = $is_raining and $is_snow_comming;
return $wear_a_hat;
}
밖에 눈이 있음에도 불구하고 내 코드에서 모자를 쓰지 말라고 하는 이유는 무엇입니까?
PHP에서 할당(=)은 논리 연산자(and)보다 우선 순위가 높습니다. 따라서 php는 다음과 같은 코드가 있다고 생각합니다.
function should_wear_a_hat($is_raining, $is_snow_comming)
{
($wear_hat = $is_raining) and $is_snow_comming;
return $wear_hat;
}
이 문제를 해결하려면 대괄호를 사용하여 우선 순위를 변경하십시오.
$wear_a_hat = ($is_raining and $is_snow_comming);
또는 단순히 (및)보다 우선 순위가 낮은 반환을 사용하십시오.
return $is_raining and $is_snow_comming;
3. 보이지 않는 문자열이 있습니다.
$text = `i am 18 y/o`;
echo $text;
이상하지만 발생합니다. 작은 따옴표(') 대신 Backtick을 사용했다면 php는 문자열이 아닌 쉘 명령에 대해 준비될 것입니다.
** 4. 바보 php는 (1과 4)의 결과가 거짓이라고 생각합니다 **
$number_of_wheels = 4;
$number_of_engine = 1;
$is_car_ready = ($number_of_wheels & $number_of_engine);
차량이 준비되었는지 확인할 준비가 되었지만 안타깝게도 그렇지 않습니다.
(&)를 놓치면 PHP는 바이너리의 논리적 비교에도 불구하고 바이너리 시스템에서 조건을 평가합니다(4 & 1 = 0 ).
$number_of_wheels = 4; // 100
$number_of_engine = 1; // 001
echo ($number_of_wheels & $number_of_engine) // 100 & 001 = 000
5. 두 개의 다른 숫자가 있지만 php는 동일하다고 말합니다.
$a = 2.0;
$b = 2.0000000000000001;
echo $a == $b;
php 한계보다 더 정확할 수 없으므로 이러한 종류의 검사를 사용할 때 주의하십시오.
6. Php는 내 과일 배열에 토마토가 있다고 말하지만 그렇지 않다는 것을 알고 있습니다.
$fruits = [
'apple' => 1,
'banana' => 0,
'cherry' => 1,
];
echo in_array('tomato', $fruits);
php는 배열을 살펴보고 각 값에 대해 '토마토'를 느슨하게 검사합니다.
‘tomato’ == 1 // yes
‘tomato’ == 0 // no
‘tomato’ == 1 // yes
따라서 실제로 배열에 토마토가 있습니다. 이 문제를 해결하려면 php가 엄격하게 체크인하도록 하는 세 번째 매개변수를 전달하기만 하면 됩니다.
$fruits = [
'apple' => 1,
'banana' => 0,
'cherry' => 1,
];
echo in_array('tomato', $fruits, true);
결론
이들 중 일부는 간단한 문자가 누락되었을 때 발생하는 신경이 쓰이는 실수였습니다.
PHP 메커니즘을 더 깊이 이해하고 코드에 대한 테스트를 작성하면 이를 처리할 수 있습니다.
Reference
이 문제에 관하여(PHP에서 재미있는 버그를 만드는 문자 위치 오류), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/debuqer/character-misplacing-making-fun-bugs-in-php-4a4m텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)