객체 지향 프로그래밍 (OOP)은 PHP의 매우 중요한 부분입니다. 객체가 특정 클래스 또는 부모 클래스에 속하는지 여부를 결정하는 것은 일일 개발에서 일반적인 요구 사항입니다. PHP는이 기능을 달성하는 데 도움이되도록 매우 실용적인 내장 기능 IS_A () 및 get_parent_class () 를 제공합니다. 이 기사는이 두 기능의 사용법을 자세히 소개하고 객체가 특정 부모 클래스 또는 상속 시스템에 속하는지 여부를 결정하는 방법을 통해 예제를 보여줍니다.
IS_A () 함수는 객체가 특정 클래스의 인스턴스인지 또는 해당 클래스의 서브 클래스 인스턴스인지를 결정하는 데 사용됩니다. 기능 프로토 타입은 다음과 같습니다.
bool is_a(object $object, string $class_name, bool $allow_string = false)
$ 객체 : 감지 해야하는 객체 인스턴스.
$ class_name : 지정된 클래스 이름 (문자열).
$ allow_string : 선택적 매개 변수, 기본값에서 false 로, 첫 번째 매개 변수를 클래스 이름 문자열에 전달할 수 있는지 여부 (개체가 아님).
$ 객체가 $ class_name 의 인스턴스이거나 서브 클래스의 인스턴스 인 경우 true 를 반환하십시오.
<?php
class Animal {}
class Dog extends Animal {}
$dog = new Dog();
var_dump(is_a($dog, 'Animal')); // bool(true)
var_dump(is_a($dog, 'Dog')); // bool(true)
var_dump(is_a($dog, 'Cat')); // bool(false)
?>
위의 예에서, $ Dog는 개 클래스의 인스턴스이며, 개는 동물 의 서브 클래스이므로 $ Dog가 동물 유형인지 판단 할 때 사실이 반환됩니다.
get_parent_class ()는 클래스 또는 객체의 부모 클래스 이름을 얻는 데 사용됩니다. 클래스에 상위 클래스가없는 경우 False가 반환됩니다.
기능 프로토 타입 :
string|false get_parent_class(object|string $class)
매개 변수는 객체 인스턴스 또는 클래스 이름 문자열 일 수 있습니다.
get_parent_class ()를 재귀 적으로 호출함으로써 객체가 특정 상속 체인에 있는지 여부를 결정할 수 있습니다.
<?php
class Vehicle {}
class Car extends Vehicle {}
class SportsCar extends Car {}
$sportsCar = new SportsCar();
$parent = get_parent_class($sportsCar); // Car
while ($parent !== false) {
echo $parent . PHP_EOL;
$parent = get_parent_class($parent);
}
// 산출:
// Car
// Vehicle
?>
객체가 차량 클래스에 속하는지 또는 서브 클래스의 인스턴스인지 확인하려면 get_parent_class () 와 함께 재귀 체크를 수행 할 수 있습니다.
<?php
function isInstanceOfParent($object, $parentClass) {
$class = get_class($object);
if ($class === $parentClass) {
return true;
}
while ($parent = get_parent_class($class)) {
if ($parent === $parentClass) {
return true;
}
$class = $parent;
}
return false;
}
class Vehicle {}
class Car extends Vehicle {}
class SportsCar extends Car {}
$sportsCar = new SportsCar();
var_dump(isInstanceOfParent($sportsCar, 'Vehicle')); // bool(true)
var_dump(isInstanceOfParent($sportsCar, 'Car')); // bool(true)
var_dump(isInstanceOfParent($sportsCar, 'Animal')); // bool(false)
?>
IS_A ()는 객체가 특정 클래스인지 하위 클래스인지 여부를 결정하는 간결한 방법이며 직접적인 판단에 적합합니다.
get_parent_class ()는 클래스의 부모 클래스 정보를 얻는 데 적합하며보다 복잡한 상속 체인을 재귀 적으로 판단하는 데 사용될 수 있습니다.
대부분의 시나리오에서 IS_A ()를 사용하는 것은 간단하고 효율적입니다.
get_parent_class ()를 결합하면보다 유연한 상속 관계 판단 논리를 달성 할 수 있습니다.
이 두 기능을 마스터하면 객체의 유형 및 상속 구조를 더 잘 제어하고 확인하고 코드의 견고성과 유지 관리를 향상시키는 데 도움이됩니다.