您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關php中重寫方法有哪些規則,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
php中重寫方法的規則有:1、final修飾的類方法不能被子類重寫;2、如果要重寫父類方法,那么參數個數必須一致;3、在重寫時,訪問級別只可以等于或大于父類,不可提升訪問級別。
方法重寫規則:
1、final修飾的類方法不可被子類重寫
final修飾的類方法不可被子類重寫 即便final private方法無法被繼承 子類仍不能對齊進行重寫
class FinalMethod { //可繼承不可重寫 final public function finalPublic() { echo "can be inherited, but be overrided"; } //可繼承不可重寫 final protected function finalProtected() { echo "can be inherited, but be overrided"; } //不可繼承不可重寫 雖然子類繼承不到父類的private方法 但同時也會被final限制無法重寫 final private function finalPrivate() { echo "can not be inherited or be overrided"; } //雖然不可繼承 但子類里可重寫此方法 private function private() { echo "can not be inherited ,but be overrided"; } } class Override extends FinalMethod { //error public function finalPublic() { } //error protected function finalProtected() { } //error private function finalPrivate() { } //correct public/protected/private function private() { //子類繼承父類重寫父類方法時訪問級別只能更加寬松 不可更為嚴格 } }
2、PHP是否重寫父類方法只會根據方法名是否一致判斷(5.3以后重寫父類方法參數個數必須一致)
這里并不是說方法參數無任何作用 PHP無重載機制 所以判斷是不是重寫只會通過方法名(C/C++不僅要方法名相同,參數也相同時才被視為重寫,否則即為重載,即新定義了一個多態函數的態) 當方法名相同時即被認為是在重寫父類方法,5.2可以參數不同,5.3以后參數需和父類方法一致,且都追尋繼承訪問級別的規則。
class Father { public function index($args_1) { } } class Child extends Father { //5.3以后重寫方法必須與父類保持參數個數相同 public function index($args_1, $args_2) { //在C/C++中此為重載非重寫,因為C/C++具有標準的多態機制,會因參數不同而視為某一方法的另一種態 //but在php中此依然為重寫 但5.3以后此為非法 必須與父類的方法參數個數保持一致 } //5.3以后重寫方法必須與父類保持參數個數相同 private function index($args_1, $args_2) { //C/C++會因為參數不同于父類方法而視為重載,即新定義了一個函數的態,所以不會受到繼承訪問權限的限制 //但php仍然會被視為對父類方法的重寫,會受到繼承訪問權限的升降規則限制 } }
3、重寫時訪問級別只可以等于或者寬松于父類 不可提升訪問級別
父類的public方法不能被子類重寫為protected或者private,protected方法不能被重寫為private,可以寬松er,不可以嚴格er
class Father { public function index() { } } class Child extends Father { protected/private function index() { //訪問權限提升 錯誤 //父類為public 則子類重寫也只能為public //父類為protected 則子類可為public/protected //父類為private 則子類public/protected/private皆可 } }
關于php中重寫方法有哪些規則就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。