PHP 프로그래밍에서 다형성은 객체 지향 프로그래밍의 중요한 기능입니다. 다형성을 사용하면 서로 다른 클래스의 객체를 통합 인터페이스로 호출 할 수있어 코드 유연성과 유지 관리가 향상됩니다. 다형성을 구현하려면 객체가 특정 클래스에 속하는지 또는 인터페이스가 구현되는지 여부를 결정해야합니다. PHP는이 판단을 완료하는 다양한 방법을 제공하며, 그 중 IS_A () 함수는 가장 일반적으로 사용되고 직접적인 방법 중 하나입니다.
IS_A () 함수는 객체가 특정 클래스에 속하는지 또는 객체의 클래스가 해당 클래스에서 상속되는지 또는 인터페이스를 구현하는지 여부를 확인하는 데 사용됩니다. 기능 프로토 타입은 다음과 같습니다.
bool is_a(object $object, string $class_name, bool $allow_string = false)
$ 객체 : 감지 할 객체 인스턴스.
$ class_name : 판단 할 클래스 이름 또는 인터페이스 이름입니다.
$ allow_string (php 5.3.0+) : 첫 번째 매개 변수가 문자열 클래스 이름이 허용되는지 (일반적으로 사용되지 않음).
is_a ()는 객체가 지정된 클래스 또는 하위 클래스에 속하거나 지정된 인터페이스가 구현 될 때 객체가 발생하면 true를 반환합니다. 그렇지 않으면 false를 반환합니다.
드로잉 동작을 정의하는 인터페이스 드로우 가능이 있다고 가정합니다. 그런 다음 두 개의 클래스 서클 과 스퀘어 가 있으며, 둘 다 드로우 가능한 인터페이스를 구현합니다.
<?php
interface Drawable {
public function draw();
}
class Circle implements Drawable {
public function draw() {
echo "Drawing a circle.\n";
}
}
class Square implements Drawable {
public function draw() {
echo "Drawing a square.\n";
}
}
function renderShape($shape) {
if (is_a($shape, 'Drawable')) {
$shape->draw();
} else {
echo "The object is not drawable.\n";
}
}
$circle = new Circle();
$square = new Square();
$stdObj = new stdClass();
renderShape($circle); // 산출: Drawing a circle.
renderShape($square); // 산출: Drawing a square.
renderShape($stdObj); // 산출: The object is not drawable.
?>
여기서는 IS_A ($ Shape, 'Drawable')를 사용하여 $ Shape가 Drawable 인터페이스를 구현하는지 여부를 결정하여 Draw () 메소드를 호출할지 여부를 결정합니다.
IS_A () 및 인스턴스 오퍼레이터 기능은 비슷하며 둘 다 객체와 클래스 또는 인터페이스 간의 관계를 판단 할 수 있습니다. 그러나 몇 가지 차이점이 있습니다.
IS_A ()는 변수 클래스 이름을 기반으로 판단 해야하는 시나리오에 적합한 클래스 이름 문자열에서 동적으로 전달되는 기능입니다.
인스턴스는 깨끗한 구문과 약간 더 나은 성능을 가진 언어 구조이지만 클래스 이름을 동적으로 전달할 수는 없습니다 (PHP 5.5+는 변수 클래스 이름을 지원합니다).
is_a ()는 문자열 양식 (세 번째 매개 변수가 허용 할 때)으로 클래스 이름을 허용 할 수 있습니다. 인스턴스는 할 수 없습니다.
예 비교 :
if (is_a($obj, 'MyClass')) { ... }
if ($obj instanceof MyClass) { ... }
IS_A ()는 객체 판단에만 사용될 수 있으며 일반 변수 유형을 판단하는 데 사용할 수 없습니다.
인터페이스 구현 판단의 경우 IS_A () 도 적용됩니다.
PHP 7.2+는 IS_A ()를 사용하는 것이 좋습니다. 특히 동적 클래스 이름이보다 편리하게 판단하기 위해.
is_a () 함수를 사용하는 것은 객체가 특정 클래스에 속하는지 또는 특정 인터페이스를 구현하는지 결정하는 간결한 메소드입니다. 다형성 프로그래밍에서 중요한 역할을합니다. IS_A () 를 합리적으로 사용하면 코드를보다 유연하고 확장 가능하게 만들고 객체 지향 프로그래밍의 품질을 향상시킬 수 있습니다.
코드 샘플 데모 주소 회로도 :
$url = "https://m66.net/example-path";
echo "샘플 코드 참조 주소:" . $url;