重寫:
就是當子類繼承父類的一些方法后,子類又在其內部定義了相同的方法,則這個新定義的方法會覆蓋繼承而來的父類的方法,子類只能調用其內部定義的方法。
有以下幾點要求:
1.當一個父類和子類有一個方法,參數和名字完全一致,那么子類方法會覆蓋父類的方法。
必須參數一致,才會實現方法覆蓋。當參數個數不一致,則會報錯(這就牽扯到上面說所得方法重載)。當方法名字不一致,就不會覆蓋,只是子類新定義的方法。
2.在實行方法覆蓋的時候,訪問修飾符可以是不一樣的,但是子類的訪問范圍必須大於等於父類的訪問范圍。
這是php這些語言設計時的規定吧。我是這么理解的是訪問高一層的東西比較容易,如果再去訪問底層的東西權限肯定要高一些。
要求參數和名字一樣。並不是要求子類,父類名稱相同。
是要求參數和名字一樣,具體就是要求參數的個數與父類相同,而並不是參數名稱一致。即傳遞的參數名字可以為任意,只要保證傳遞的個數相同即可。
看代碼:
<?php class shao { public function sasa($name){ echo $name,'狗!<br/>'; } } class zhen extends shao{ public function aaa() { echo '貓<br/>'; } } $lli = new zhen(); $lli->aaa(); $lli->aaa('binghh'); ?>
<?php class fu { public function text(){ echo '父類'; } public function textt(){ echo '父親'; } } class erzi extends fu{ public function text() { parent::text();//我要父類的東西 echo '兒子';//重寫 } } $shili = new fu(); $erzi = new erzi(); $erzi->text(); ?>
重載:
重載是類的多態的一種實現。函數重載指一個標識符被用作多個函數名,且能夠通過函數的參數個數或參數類型將這些同名的函數區分開來,調用不發生混淆。即當調用的時候,雖然方法名字相同,但根據參數的不同可以自動調用相應的函數。
php不好實現。
可以使類里面的某個方法產生多種效果,根據傳入參數不同,可以執行不同的邏輯。
有以下幾點要求:
1、在使用重載時只能通過相同的方法名、不同的參數形式實現。不同的參數類型可以是不同的參數類型,不同的參數個數,不同的參數順序(參數類型必須不一樣);
2、不能通過訪問權限、返回類型、拋出的異常進行重載;
3、方法的異常類型和數目不會對重載造成影響;
有點復雜 代碼不准...
<?php class fu { public function text(){ echo '父類'; } public function textt(){ echo '父親'; } } class erzi extends fu { function test($name) { //方法重載 parent::text();//我要父類的東西 echo "erzi",$name;//重寫 } } $erzi = new fu(); $erzi-> text("123"); ?>