Property_Exists ()는 속성의 값이 NULL 인지 여부에 관계없이 객체가 특정 속성을 갖는 지 여부를 감지하는 데 사용되며, 존재하는 한 (할당되었는지 여부)가 존재하는 한 TRUE를 반환합니다.
문법:
property_exists(object|string $object_or_class, string $property): bool
예:
class User {
public $name;
private $email;
}
$user = new User();
var_dump(property_exists($user, 'name')); // true
var_dump(property_exists($user, 'email')); // true
var_dump(property_exists($user, 'age')); // false
위의 예에서 볼 수 있듯이 Property_Exists ()는 사유지를 감지 할 수 있습니다. 부동산이 클래스에 존재하는 한 가시성과 할당되었는지 여부에 관계없이 사실 반환됩니다.
이점:
모든 가시성 (공개, 보호, 개인) 속성을 감지 할 수 있습니다.
속성에 할당되는지 여부는 신경 쓰지 않으며, 널이라도 존재하는 것으로 판단 될 수 있습니다.
결점:
속성이 초기화되었는지 여부를 결정하는 것은 불가능하며, 선언 된 지 여부 만 결정할 수 있습니다.
ISSET ()는 변수가 지정되고 null 이 아닌지 여부를 결정하는 데 더 일반적입니다. 객체 속성 감지에도 사용될 수 있습니다.
문법:
isset(mixed $var): bool
예:
class User {
public $name;
public $email = null;
}
$user = new User();
var_dump(isset($user->name)); // false
var_dump(isset($user->email)); // false
$user->name = 'Tom';
var_dump(isset($user->name)); // true
이점:
속성에 할당되어 있고 null 이 아닌지 여부를 결정할 수 있습니다.
데이터 가용성을 확인하기 위해 일부 논리적 판단에서 더 일반적으로 사용됩니다.
결점:
비공개 또는 보호 특성을 감지 할 수 없습니다 (클래스 밖에서 액세스하는 경우).
속성이 존재하지만 NULL 인 경우 결과는 여전히 False 이므로 잘못 판단 할 수 있습니다.
비교하다 | property_exists () | isset () |
---|---|---|
속성이 존재하는지 여부 | ? 예 | ?? 속성이 할당되지 않았거나 null 인 경우 false를 반환합니다. |
속성은 null입니다 | ? 영향을받지 않습니다 | ? 거짓이 반환됩니다 |
개인/보호 속성 감지 | ? 할 수 있다 | ? 수업 밖에서 액세스 할 수 없습니다 |
데이터 판단에 사용됩니다 | ? 권장되지 않습니다 | ? 일반적으로 사용됩니다 |
반사를 위해 디버깅 | ? 더 정확합니다 | ? 충분히 엄격하지 않습니다 |
시나리오 1 : 클래스에서 특정 속성이 선언되는지 여부를 결정합니다.
property_exists () 사용은 더욱 신뢰할 수 있습니다.
if (property_exists($user, 'name')) {
echo "속성이 존재합니다";
}
시나리오 2 : 특정 속성이 할당되었는지 확인
isset ()를 사용하는 것이 더 적절합니다.
if (isset($user->name)) {
echo "속성이 할당되지 않았습니다 null";
}
시나리오 3 : API를 통한 JSON 매핑 객체 속성 감지
JSON 데이터 매핑을 PHP 객체에 처리 할 때 속성이 NULL 일 수 있습니다.
$json = '{"title": null}';
$data = json_decode($json);
var_dump(property_exists($data, 'title')); // true
var_dump(isset($data->title)); // false
이 예제는 Property_Exists ()가 선언을 감지하고 ISSET ()는 할당 상태를 감지한다는 것을 분명히 보여줍니다.
대부분의 경우, 둘 사이의 성능 차이는 크지 않지만 isset ()는 속성 _exists () (함수)보다 약간 빠른 언어 구조입니다. 그러나 정확성을 고려할 때 판단 및 객체 구조를 유형 할 때보다 명백한 의미를 가진 기능을 선택하는 것이 좋습니다.
성능 요구 사항이 매우 높고 구조가 신뢰할 수있는 경우 ISSET ()를 빠른 감지에 사용할 수 있습니다. 그러나 속성 선언을 엄격하게 감지 해야하는 경우 Property_Exists ()는 여전히 사용해야합니다.
실제 개발에서 RESTFUL API 클라이언트를 구축하는 경우 JSON 응답에 필드 값이 NULL 인 경우에도 JSON 응답에 특정 필드가 포함되어 있는지 여부를 결정해야합니다. 그렇다면 Property_Exists ()를 사용하여 호환성을 보장해야합니다. 예를 들어, 오류 메시지 필드가 있는지 확인하십시오.
if (property_exists($response, 'error')) {
// 오류 메시지를 처리합니다
}
비어 있지 않은 문자열 또는 유효한 숫자와 같이 필드에 적합한 데이터에만 초점을 맞추면 isset ()를 사용할 수 있습니다.
if (isset($response->data->url)) {
$url = $response->data->url;
header("Location: https://gitbox.net/redirect?url=" . urlencode($url));
}