PHP에서 IS_A 함수는 객체가 지정된 클래스의 인스턴스인지 또는 해당 클래스에서 상속되는지 여부를 결정하는 데 사용됩니다. 기본 사용량은 다음과 같습니다.
is_a(object $object, string $class_name, bool $allow_string = false): bool
여기서, 세 번째 매개 변수 $ allow_string은 들어오는 클래스 이름의 문자열을 객체를 교체 할 수 있는지 여부를 지정하는 부울 값입니다. 설정이 잘못된 경우 판단 결과가 부정확 할 수 있습니다.
$ 객체 : 확인할 객체 또는 클래스 이름 문자열입니다.
$ class_name : 판단 할 클래스 이름입니다.
$ alc
$ allow_string 이 false 일 때, is_a는 문자열이 객체가 아니라 통과되면 false를 반환합니다.
$ allow_string 이 true 일 때 전달 된 $ 객체는 클래스 이름 문자열이 될 수 있습니다. 현재 IS_A는 클래스가 $ class_name 의 서브 클래스인지 또는 동일한 클래스인지 여부를 결정합니다.
다음 코드가 있다고 가정합니다.
class ParentClass {}
class ChildClass extends ParentClass {}
$obj = new ChildClass();
// 세 번째 매개 변수를 잘못 설정합니다true,그러나 물체가 전달됩니다
$result = is_a($obj, 'ParentClass', true);
var_dump($result);
여기서 $ obj 는 childclass 의 인스턴스이지만, childclass는 parentclass 의 인스턴스이지만, 세 번째 매개 변수는 true이기 때문에 IS_A는 $ obj를 문자열 클래스 이름으로 취급하여 판단에서 예외를 초래합니다. 결과는 예상되는 사실이 아닐 수 있습니다.
객체가 전달되었다고 확신하면 세 번째 매개 변수를 False 로 설정하거나 생략해야합니다.
$result = is_a($obj, 'ParentClass');
또는:
$result = is_a($obj, 'ParentClass', false);
객체가 아닌 클래스 이름 문자열을 전달하면 세 번째 매개 변수를 true 로 사용해야합니다.
$className = 'ChildClass';
$result = is_a($className, 'ParentClass', true);
이런 식으로 IS_A는 Childclass가 ParentClass 에서 상속되는지 여부를 결정합니다.
class ParentClass {}
class ChildClass extends ParentClass {}
$obj = new ChildClass();
// 올바르게 사용하십시오,세 번째 매개 변수를 전달하거나 전달하지 마십시오false
if (is_a($obj, 'ParentClass')) {
echo "대상은ParentClass또는 서브 클래스 인스턴스。";
}
// 오류 데모,세 번째 매개 변수는입니다true타임 패스 객체
if (is_a($obj, 'ParentClass', true)) {
echo "이것은 올바르게 출력되지 않습니다,因为세 번째 매개 변수는입니다true타임 패스 객체会导致判断不准确。";
}
// 올바른 데모,세 번째 매개 변수는입니다true시간 통과 클래스 이름 문자열
$className = 'ChildClass';
if (is_a($className, 'ParentClass', true)) {
echo "ChildClass예ParentClass서브 클래스。";
}
실제 프로젝트에서 일반적으로 인스턴스 연산자를 사용하여 개체 인스턴스를 판단하는 것이 좋습니다.
if ($obj instanceof ParentClass) {
echo "대상은ParentClass또는 서브 클래스 인스턴스。";
}
인스턴스는 세 번째 매개 변수의 모호성을 가지지 않으며, 이는 더 직관적이고 안전합니다.
IS_A를 사용할 때는 전달 된 매개 변수의 유형에 따라 세 번째 매개 변수 $ allow_string이 합리적으로 설정되어 있는지 확인하십시오.
객체가 전달되면 세 번째 매개 변수를 전달하지 않거나 False를 전달하지 않는 것이 좋습니다.
클래스 이름 문자열이 전달되면 세 번째 매개 변수를 true 로 설정해야합니다.
코드의 인스턴스를 사용하여 오용 IS_A를 피하기 위해 객체 유형을 판단하는 것이 가장 좋습니다.
위의 방법을 통해 IS_A 기능의 부정확 한 판단 결과를 효과적으로 피할 수 있으며 프로그램 논리의 정확성을 보장 할 수 있습니다.
// 액세스 예제url
$url = "https://m66.net/example-path";
echo "<a href=\"$url\">点击这里액세스 예제</a>";