is_a(object|string $object_or_class, string $class, bool $allow_string = false): bool
$ object_or_class : 객체 또는 클래스 이름 문자열 일 수 있습니다.
$ 클래스 : 판단 할 대상 클래스 이름.
$ alc
예:
class Animal {}
class Dog extends Animal {}
$dog = new Dog();
var_dump(is_a($dog, 'Animal')); // true
당신은 또한 줄을 통과 할 수 있습니다 :
var_dump(is_a('Dog', 'Animal', true)); // true
$object instanceof ClassName
예:
$dog = new Dog();
var_dump($dog instanceof Animal); // true
참고 : 인스턴스는 객체에만 사용할 수 있으며 클래스 이름 문자열에 직접 사용할 수 없습니다.
둘 다 부울 값을 반환하여 객체가 특정 클래스의 인스턴스인지 하위 클래스인지 여부를 결정합니다. 하지만:
IS_A () 는 더 편안하며 클래스 이름 문자열을 판단 할 수 있습니다 ( $ allow_string = true 의 경우).
인스턴스는 더 엄격하고 객체 지향적이며 클래스 이름 문자열을 판단 할 수 없습니다.
대부분의 시나리오에서, 둘 사이의 성능 차이는 무시할 수 있습니다. 그러나 언어의 관점에서 인스턴스는 객체에 직접 작용하고 성능이 약간 더 나은 연산자입니다. IS_A ()는 특정 호출 오버 헤드가있는 함수입니다.
매우 빈번한 루프에서 유형 판단을 수행하지 않으면 이에 너무 많은주의를 기울일 필요가 없습니다.
IS_A () 는 PHP 5 이전에 유사한 내부 기능이었으며 PHP 5 이후 공식적으로 현재 양식을 지원했습니다.
인스턴스 는 언어 운영자이며 안정적입니다.
코드가 이전 버전과 호환되거나 기능 호출 (예 : 기능 재정의, 모의 등)을 피해야하는 경우 인스턴스가 더 신뢰할 수 있습니다.
사용자가 제공 한 클래스 이름을 사용하여 판단 할 때 IS_A ()가 쉽게 오용됩니다. 예를 들어:
$class = $_GET['class']; // 사용자는 모든 클래스 이름으로 전달할 수 있습니다
if (is_a($object, $class)) {
// ...
}
이러한 유형의 동적 판단에는 특정 안전 위험이 있습니다. 인스턴스를 사용하면 유형 구조를 더 잘 제한하고 잠재적 인 주사 또는 오해를 피할 수 있습니다.
다음과 같은 이유로 먼저 인스턴스를 사용하는 것이 좋습니다.
더 의미 있고 객체 지향 프로그래밍 스타일과 일치합니다.
오류 위험이 적고 명확한 유형 논리.
약간 우수한 성능과 더 간단한 표현.
소수의 사람들이 클래스 이름을 동적으로 전달 해야하는 경우 (공장 모드, 플러그인 메커니즘) IS_A ()를 사용할 수 있지만 $ allow_string = true를 명시 적으로 설정하고 클래스 이름으로 전달 된 것이 안전하고 신뢰할 수 있는지 확인하십시오.
예를 들어:
$class = 'App\\Plugins\\SomeHandler';
if (is_a($handler, $class, true)) {
$handler->handle();
}
참조 동적 플러그인 관리 샘플 코드는 다음과 같습니다.
https://m66.net/examples/plugin-loader.php