이 기사에서는 주로 PHP의 객체 지향 다형성 예제에 대한 자세한 설명을 공유합니다. 다형성은 PHP가 수행하는 클래스 사용 상황에 따라 클래스의 특성과 동작을 재정의하거나 변경하는 기능을 의미합니다. 다형성을 달성하기 위한 오버로딩을 지원하지 않지만 PHP는 다양한 방향으로 다형성 효과를 달성할 수 있습니다.
는 다음과 같습니다.
class a{ function test($i){ // $i可以是任何类型的变量 print_r $i; } }
위의 예에서 PHP는 약한 유형의 언어이므로 $i는 모든 유형의 변수가 될 수 있음을 알 수 있습니다. 이러한 방식으로 함수는 매개변수 유형을 변경하여 오버로딩 방법을 구현할 수 있습니다. Java와 같은 강력한 유형의 언어로.
이 형식은 JAVA의 매개변수 유형 오버로딩보다 더 편리하고 효율적이지만 다음과 같은 문제도 있습니다.
<?php/** 教师类有一个drawPolygon()方法需要一个Polygon类,用来画多边形,此方法内部调用多边形的draw()方法,但由于弱类型,我们可以传入Circle类,就会调用Circle类的draw方法,这就事与愿违了。甚至可以传入阿猫、阿狗类,如果这些类没有draw()方法还会报错。*/class Teacher{ function drawPolygon($polygon){ $polygon->draw(); } }class Polygon{ function draw(){ echo "draw a polygon"; } }class Circle{ function draw(){ echo "draw a circle"; } }?>
이러한 유연한 다형성에는 약간의 제어가 필요함을 알 수 있습니다. PHP5.3 이후에는 유형 제한이 적용될 수 있습니다.
// 仿java,在变量参数前加一个限制类名 function drawPolygon(Polygon $polygon){ $polygon->draw(); }
이는 Polygon 및 해당 하위 클래스만 전달되도록 제한합니다.
매개변수 수를 변경하는 오버로드도 있습니다. 이는 PHP가 메서드 오버로딩을 지원하지 않기 때문에 이를 구현하려면 다음과 같은 몇 가지 대체 메서드가 필요합니다.
<?php// 通过可变参数来达到改变参数数量重载的目的 // 不是必须传入的参数,必须在函数定义时赋初始值function open_database($DB, $cache_size_or_values=null, $cache_size=null) { switch (function_num_args()) // 通过function_num_args()函数计算传入参数的个数,根据个数来判断接下来的操作 { case 1: $r = select_db($DB); break; case 2: $r = select_db($DB, $cache_size_or_values); break; case 3: $r = select_db($DB, $cache_size_or_values, $cache_size); break; } return is_resource($r); }?>
관련 권장 사항:
위 내용은 PHP의 객체지향 다형성 예제에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!