PHP之物件導向多型實例詳解

小云云
發布: 2023-03-21 16:34:01
原創
1220 人瀏覽過

本文主要和大家分享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多態與動態綁定

php實作物件導向多型方法的案例

以上是PHP之物件導向多型實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!