程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 方法重載(重寫)/方法覆蓋、魔術函數實現,重載魔術

方法重載(重寫)/方法覆蓋、魔術函數實現,重載魔術

編輯:關於PHP編程

方法重載(重寫)/方法覆蓋、魔術函數實現,重載魔術



方法重載
函數名不一樣通過函數的參數個數或者參數類型不同,達到調用同一個函數名,但是可以區分不同的函數
class A{
public function test1(){
echo "test1";}
public function test1($a){
echo "test1 hhh";}
}


重載
$a=newA();
$a->test1();
$a->test1(222);

上面的這種用法是不對的

魔術函數 方法重載實現

class A{
public function test1($p){
echo "接受一個參數";}
public function test1($p){
echo "接受二個參數";}
}
提供一個__call
__call是它一個對象調用某個方法,而該方法不存在,則系統會自動調用__call
function __call($method,$p){

var_dump($p);
if($method=="test1"){
if(count($p)==1){
$this->test1($p);
}else if(count($p)==2){
$this->test2($p);
}
}
}

$a=newA();
$a->test(1);
$a->test(1,2);


魔術函數
__set,__get,__construct,__destruct,__call,__isset,__unset

__LINE__輸出多少行
,__FILE__輸出文件名
,__DIR__,
__CLASS__輸出類名


方法重寫/方法覆蓋(overload)

<?php
class Animal{
public $name;
protected $price;
function cry(){
echo "不知道";}

}
class Dog extends Animal{
//覆蓋
function cry(){
echo "小狗";}
}
class Pig extends Animal{
//覆蓋
function cry(){
echo "小豬";}
}

$dog1=new Dog();
$dog1->cry();
$pig=1new Pig();
$pig1->cry();
?>

關於重寫:
當一個父類知道所有的子類都有一個方法但是父類不能確定該方法究竟如何寫,可以讓子類去覆蓋這個方法
1.要實現重寫,要求子類的那個方法的名字和參數列表一模一樣,但是並不要求參數名稱一樣
2.如果子類要求調用父類的某個方法(public/protected)則可以使用parent::方法名(參數...),父類名::方法名(參數...)
3.在實現方法覆蓋的時候,訪問修飾符可不一樣,但是必須滿足子類的訪問范圍>=父類的訪問范圍


多態體現在什麼地方
當子類沒用覆蓋父類的方法則$call->cry()調用的是父類,子類覆蓋父類的方法則調用自己的cry( )

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved