현재 위치: > 최신 기사 목록> 세 번째 매개 변수 설정이 올바르지 않아 판단 결과가 잘못되었습니다.

세 번째 매개 변수 설정이 올바르지 않아 판단 결과가 잘못되었습니다.

M66 2025-06-02

PHP에서 IS_A 함수는 객체가 지정된 클래스의 인스턴스인지 또는 해당 클래스에서 상속되는지 여부를 결정하는 데 사용됩니다. 기본 사용량은 다음과 같습니다.

 is_a(object $object, string $class_name, bool $allow_string = false): bool

여기서, 세 번째 매개 변수 $ allow_string은 들어오는 클래스 이름의 문자열을 객체를 교체 할 수 있는지 여부를 지정하는 부울 값입니다. 설정이 잘못된 경우 판단 결과가 부정확 할 수 있습니다.


IS_A 함수의 매개 변수에 대한 자세한 설명

  • $ 객체 : 확인할 객체 또는 클래스 이름 문자열입니다.

  • $ class_name : 판단 할 클래스 이름입니다.

  • $ alc

$ allow_stringfalse 일 때, is_a는 문자열이 객체가 아니라 통과되면 false를 반환합니다.

$ allow_stringtrue 일 때 전달 된 $ 객체는 클래스 이름 문자열이 될 수 있습니다. 현재 IS_A는 클래스가 $ class_name 의 서브 클래스인지 또는 동일한 클래스인지 여부를 결정합니다.


일반적인 오류 예제

다음 코드가 있다고 가정합니다.

 class ParentClass {}
class ChildClass extends ParentClass {}

$obj = new ChildClass();

// 세 번째 매개 변수를 잘못 설정합니다true,그러나 물체가 전달됩니다
$result = is_a($obj, 'ParentClass', true);
var_dump($result);

여기서 $ objchildclass 의 인스턴스이지만, childclass는 parentclass 의 인스턴스이지만, 세 번째 매개 변수는 true이기 때문에 IS_A는 $ obj를 문자열 클래스 이름으로 취급하여 판단에서 예외를 초래합니다. 결과는 예상되는 사실이 아닐 수 있습니다.


세 번째 매개 변수의 오류 설정으로 인한 문제를 피하는 방법은 무엇입니까?

1. 물체와 문자열을 분명히 구별합니다

객체가 전달되었다고 확신하면 세 번째 매개 변수를 False 로 설정하거나 생략해야합니다.

 $result = is_a($obj, 'ParentClass');

또는:

 $result = is_a($obj, 'ParentClass', false);

2. 클래스 이름 문자열을 판단 해야하는 경우에만 true로 설정하십시오.

객체가 아닌 클래스 이름 문자열을 전달하면 세 번째 매개 변수를 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서브 클래스。";
}

추가 팁 : PHP7+는 인스턴스 오퍼레이터를 사용하는 것이 좋습니다

실제 프로젝트에서 일반적으로 인스턴스 연산자를 사용하여 개체 인스턴스를 판단하는 것이 좋습니다.

 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>";