PHP 객체 지향 프로그래밍에서 객체가 특정 클래스에 속하는지 여부를 결정하거나 객체의 클래스 수준 관계를 결정해야합니다. IS_A () 및 get_class () 는 매우 일반적으로 사용되는 두 가지 기능으로, 객체의 클래스 계층 관계를 효과적으로 판단 할 수 있습니다. 이 기사는이 두 기능의 사용법을 자세히 소개하고 함께 사용하는 방법을 설명하기 위해 예제를 사용합니다.
IS_A () 함수는 객체가 클래스의 인스턴스인지 또는 객체의 클래스가 해당 클래스에서 상속되는지 여부를 확인하는 데 사용됩니다. 구문은 다음과 같습니다.
bool is_a(object $object, string $class_name, bool $allow_string = false)
$ 객체 : 확인할 객체.
$ class_name : 대상 클래스 이름.
$ allow_string : true 인 경우 첫 번째 인수는 객체만이 아니라 클래스 이름 문자열이 될 수 있습니다.
is_a ()는 객체가 속한 클래스와 부모 클래스 체인을 확인합니다. 그들 중 하나가 만나면 사실이 되돌아 갈 것입니다.
get_class () 함수는 객체의 실제 클래스 이름을 반환합니다. 구문은 다음과 같습니다.
string get_class(object $object)
객체의 현재 클래스 이름 만 반환하고 상위 클래스를 포함하지 않습니다.
IS_A () 만 사용하면 객체가 특정 클래스 또는 부모 클래스에 속하는지 여부를 결정할 수 있습니다. 그러나 때때로 우리는 판단해야합니다.
개체가 특정 클래스인지 여부 (상속은 고려되지 않음)
개체가 특정 클래스의 서브 클래스인지 또는이 클래스인지 여부
상속 관계의 계층 적 차이를 결정하십시오
현재 get_class () 와 is_a () 의 조합은 다양한 판단 논리를 유연하게 구현할 수 있습니다.
다음 클래스 구조가 있다고 가정합니다.
class Animal {}
class Dog extends Animal {}
class Poodle extends Dog {}
$poodle = new Poodle();
if (is_a($poodle, 'Dog')) {
echo '이것은 a입니다Dog또는Dog서브 클래스 인스턴스';
}
산출:
이것은 a입니다Dog또는Dog서브 클래스 인스턴스
if (get_class($poodle) === 'Dog') {
echo '이것은 a입니다Dog수업의 예';
} else {
echo '아니요Dog클래스 인스턴스';
}
산출:
아니요Dog클래스 인스턴스
if (is_a($poodle, 'Dog') && get_class($poodle) !== 'Dog') {
echo '이것은Dog서브 클래스 인스턴스,但아니요Dog수업 자체';
}
산출:
이것은Dog서브 클래스 인스턴스,但아니요Dog수업 자체
일부 비즈니스 논리에서는 다음과 같습니다.
클래스 자체에 대한 논리를 실행하십시오
서브 클래스에 대해 다른 논리를 실행하십시오
IS_A () 및 get_class () 의 공동 판단을 사용하여 정확하게 제어 할 수 있습니다.
IS_A () 는 세 번째 매개 변수를 지원하여 문자열 클래스 이름 판단을 허용합니다.
get_class ()는 객체 매개 변수 만 허용하며 문자열을 직접 통과 할 수 없습니다.
클래스 이름은 사례에 민감하며 사례의 일관성에주의를 기울입니다.
PHP 5.3.0 이후 IS_A ()는 문자열을 첫 번째 매개 변수로 받아들이고 세 번째 매개 변수와 함께 사용될 수 있습니다.
IS_A () 및 get_class () 의 조합을 통해 PHP에서 클래스 계층 관계를 유연하고 정확하게 판단 할 수 있습니다.
IS_A ()는 특정 클래스 또는 하위 클래스에 속하는지 여부를 결정합니다.
get_class () 객체의 특정 클래스 이름을 결정합니다.
공동 사용은 특정 범주를 상속 카테고리와 구별하여 다양한 비즈니스 요구를 충족시킬 수 있습니다.
관련 태그:
get_class