현재 위치: > 최신 기사 목록> IS_A () 잘못된 순서 : 객체 및 클래스 이름의 매개 변수를 반전시키는 결과

IS_A () 잘못된 순서 : 객체 및 클래스 이름의 매개 변수를 반전시키는 결과

M66 2025-05-29

PHP에서 IS_A () 함수는 객체가 클래스의 특정 클래스 또는 서브 클래스에 속하는지 여부를 감지하는 데 사용됩니다. 구문은 다음과 같습니다.

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

그중 첫 번째 매개 변수는 객체 또는 객체 이름이어야하며 두 번째 매개 변수는 클래스 이름입니다. 이 두 매개 변수의 순서가 바뀌면 코드는 무엇을 가지고 있습니까? 이 기사는 예제를 사용하여 잘못된 매개 변수 순서를 사용할 때 IS_A () 의 성능 및 잠재적 위험을 분석합니다.


올바른 사용의 예

두 가지 범주가 있다고 가정합니다.

 class Animal {}
class Dog extends Animal {}

$dog = new Dog();

var_dump(is_a($dog, 'Animal'));   // true,Dog 예 Animal 서브 클래스
var_dump(is_a($dog, 'Dog'));      // true,$dog 예 Dog 예

이 코드에서 IS_A ($ dog, 'Animal')는 True를 반환하여 $ Dog Object가 동물 클래스 또는 하위 클래스에 속함을 나타냅니다.


오류 사용의 예 : 매개 변수 순서가 반전됩니다

예를 들어 매개 변수 순서를 반대로 작성하면 다음과 같습니다.

 var_dump(is_a('Animal', $dog));  // 오류 데모

현재는 어떻게됩니까? 분석하자 :

  1. 첫 번째 인수는 대상이 아닌 문자열 '동물' 입니다.

  2. 두 번째 매개 변수는 클래스 이름 문자열이 아닌 Object $ Dog 입니다.

IS_A () 의 정의에 따르면,이 함수는 첫 번째 매개 변수가 객체이고 두 번째 매개 변수는 문자열 클래스 이름이고, 순서가 유형 불일치를 유발하도록 반전됩니다.


실제 결과

  • PHP 7.2 이상은 다음과 같은 경고 또는 오류를 던집니다 .

 Warning: is_a() expects parameter 1 to be object, string given
  • 함수는 false를 반환하고 올바르게 판단 할 수 없습니다.

  • 코드 논리가 실패하여 판단력이 실패합니다.

샘플 코드 :

 $dog = new Dog();
var_dump(is_a('Animal', $dog)); // false,그리고 경고

문자열이 첫 번째 매개 변수로 허용되는 경우 특별한 경우

is_a ()는 객체 대신 클래스 이름 문자열로 전달되는 첫 번째 매개 변수를 지원하기 위해 세 번째 매개 변수 $ allow_string을 true 로 설정하도록 허용합니다.

 var_dump(is_a('Dog', 'Animal', true));  // true,심판 Dog 예否继承 Animal

그러나이 경우에도 두 번째 매개 변수는 여전히 문자열 클래스 이름이어야하며 역 순서는 여전히 오류입니다.

 var_dump(is_a('Animal', $dog, true)); // 여전히 틀 렸습니다,매개 변수 순서는 뒤집 혔습니다

요약

  • is_a () 함수의 첫 번째 매개 변수는 객체 여야합니다 (또는 $ allow_stringtrue 일 때 클래스 이름 문자열이어야합니다). 두 번째 매개 변수는 클래스 이름 문자열이어야합니다.

  • 매개 변수 순서를 되돌리면 유형 불일치가 발생하면 PHP가 경고하고 거짓을 반환하며 판단은 유효하지 않습니다.

  • 매개 변수 전송 오류로 인해 발견하기 어려운 논리적 취약점을 피하기 위해 개발 중 매개 변수 순서에 특별한주의를 기울여야합니다.