PHP에서는 property_exists() 함수 또는 isset() 함수를 사용하여 객체나 클래스에 특정 속성(property)이 존재하는지 확인할 수 있습니다. 두 함수는 비슷한 목적으로 사용되지만 동작 방식에 중요한 차이가 있으므로 상황에 맞게 선택하는 것이 좋습니다.
property_exists() 함수
property_exists()는 클래스 정의 자체에 해당 속성이 선언되어 있는지 검사합니다. 접근 제한자(public, protected, private)와 관계없이, 그리고 속성 값이 null이더라도 속성이 선언되어 있으면 true를 반환합니다.
문법
property_exists( mixed $class , string $property )
사용 예시
if (property_exists($object, 'a_property')) {
// 속성이 존재하는 경우 실행할 코드
}isset() 함수
isset()은 해당 속성이 존재하고 그 값이 null이 아닌지 확인합니다. 즉, 속성이 선언되어 있어도 값이 null이라면 false를 반환한다는 점에 주의해야 합니다.
문법
isset( mixed $var [, mixed $... ] )
사용 예시
if (isset($object->a_property)) {
// 속성이 존재하고 null이 아닌 경우 실행할 코드
}만약 'a_property'의 값이 null이라면 isset()은 false를 반환합니다.
예제 코드
다음 예제를 통해 property_exists()의 실제 동작을 확인해 보겠습니다.
<?php
class Demo {
public $one;
private $two;
static protected $VAL;
static function VAL() {
var_dump(property_exists('Demo', 'two'));
}
}
var_dump(property_exists('Demo', 'one'));
var_dump(property_exists(new Demo, 'one'));
?>실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
bool(true) bool(true)
클래스 이름 문자열('Demo')을 전달하거나 인스턴스(new Demo)를 전달해도 모두 같은 결과를 얻을 수 있습니다. 이처럼 property_exists()는 객체가 없어도 클래스 이름만으로 속성 존재 여부를 확인할 수 있다는 장점이 있습니다.
두 함수의 차이점 정리
- property_exists(): 속성이 선언되기만 하면 값이
null이어도true를 반환합니다. - isset(): 속성이 존재하면서 값이
null이 아닐 때만true를 반환합니다.
따라서 단순히 속성의 선언 여부를 확인하려면 property_exists()를, 속성에 유효한 값이 할당되어 있는지까지 확인하려면 isset()을 사용하는 것이 적절합니다.