문제
나는 이것을 가진 레거시 코드를 얻었습니다.
<?PHP
if(isset($_GET['pagina'])=="homepage") {
?>
HtmlCode1
<?php
} else {
?>
HtmlCode2
<?php
}
?>
나는 왜 그런지 정확히 모르겠지만 이것은 효과가있는 것 같습니다. htmlcode1은 내가? pagina = 홈페이지를 가질 때로드되고 pagina var가 존재하지 않거나 다른 것이있을 때 htmlcode2가로드됩니다 (실제로 다른 것을 보지 못했습니다. 웹 사이트는 PHP4를 사용하고 있습니다 (정확한 버전은 모릅니다). 그러나 실제로, 이것은 어떻게 작동 할 수 있습니까? 나는 매뉴얼을보고 Isset이 bool을 반환한다고 말합니다.
누구나?
해결책
문제는 "=="가 유형에 민감한 비교가 아니라는 것입니다. 모든 (비어 있지 않은) 문자열은 부울과 "동일"하지만 그렇지 않습니다. 동일한 ( "==="연산자를 사용해야합니다).
빠른 예,이 행동을보고있는 이유 :
http://codepad.org/anh1ahu8
문서의 자세한 내용은 다음을 참조하십시오.
http://php.net/manual/en/language.operators.comparison.php
http://ca3.php.net/manual/en/types.comparisons.php ( "=="테이블과의 "느슨한 비교)
다른 팁
isset()
참 또는 거짓을 반환합니다. 부울 비교에서 "homepage"
평가할 것입니다 true
. 그래서 본질적으로 당신은 여기에 왔습니다.
if ( isset($_GET['pagina']) == true )
Pagina가 무엇이든 동일하면 Htmlcode1이 표시됩니다. 설정이 없으면 htmlcode2가 표시됩니다.
나는 그것을 확인하기 위해 그것을 시도했고 ?pagina=somethingelse
하다 ~ 아니다 HtmlCode2를 표시하십시오.
True/False와 "홈페이지"를 비교하는 것이 실제로 의미가 없기 때문에 버그라고 생각합니다. 코드는 실제로 다음을 기대할 것입니다.
if (isset($_GET['pagina']) && ($_GET['pagina'] == "homepage")) {
}
이것이 어떻게 작동하는지 (이전에 언급 된 "홈페이지"== true와는 별도로) :
- ISSET이 어딘가에 재정의 되었습니까?
- 자체 수정 된 PHP 버전입니까?