PHP 코드를 보면 if 문에 변수들 체크하는 여러 방법들이 있습니다.
정리해보고자 합니다.
<?php
$apple = 2;
$mango = null;
망고와 사과변수가있습니다
PHP는 8버전까지 변수를 초기화 하지않고 쓸 수가 있습니다.( 9.0부터는 무조건 초기화 하게 변경됨)
따라서 변수가 있는지 없는지 부터 체크해야됩니다.
기본 1
if(isset($mango)){
// true 조건
} else {
}
isset 은변수가 설정되어있는지 확인합니다.
(변수가 선언되어있는지 null 과 다른지 확인합니다.)
빈문자열 , null, undefind 만 false 나머지는 true 입니다.
$mango 는 null 이므로 false 입니다.
기본 2
if($mango){
// true 조건
}
if문안에 변수만 달랑적는 경우가 있습니다.
변수만 적었을 경우 타입에 따라 다릅니다.
문자열: 빈문자 제외 true
숫자: 0 제외 true
배열: 빈배열 제외 true
객체: 빈 객체 제외 true
null : false
정의 안된 변수: 경고가 발생하고 false
패턴 1
if(isset($mango) && $mango){
// true 조건
}
isset () && 뒤에 변수를 적은것은 선언하지않은 변수일때 경고를 내기 때문입니다.
PHP 에는 배열을 객체로 바꾸거나 빈 객체를 만들 수가 있습니다.
$testObejct = new stdClasss();
하지만 객체는 empty 함수나 if(!$emptyObject) if 문으로 체크할 수없습니다
__isset() 이라는 함수 때문이라고 합니다.
(array)$testObejct 로 배열로 형변환 할 수있지만 이러면 배열의 특성까지 지니게 되어서
램을 더먹습니다. (nikita 의 PHP 성능영상에서 봤네요[1])
따라서 get_object_vars 함수를 통해 체크해야됩니다.
if(empty(get_object_vars($testObject))) {
// 비어있는 조건
} else {
// 비어있지 않은 조건
}
[1] *객체를 (array)로 형변환시 메모리 더 쓰는자료 출처
nikita popov PHP 성능 영상
https://www.youtube.com/watch?v=JBWgvUrb-q8
https://www.php.net/manual/en/types.comparisons.php
PHP: PHP type comparison tables - Manual
Some function to write out your own comparisson table in tsv format. Can be easily modified to add more testcases and/or binary functions. It will test all comparables against each other with all functions. '==', 'ne' => '!=', 'gt' =>
www.php.net
PHP isset, empty is_null 비교
'PHP' 카테고리의 다른 글
그누보드 보안 SQL 인젝션 방어하기 (0) | 2022.03.30 |
---|---|
PHP 동작방식 - 생명주기 (0) | 2022.03.27 |
PHP 8.1 의 변경점: 클래스 로딩 최적화 (0) | 2021.12.05 |
PHP 5.2에서 JSON_FORCE_OBJECT 대용 (0) | 2021.07.05 |
PHP 에서 select 쿼리 결과값이 않나올 때 (0) | 2021.06.28 |