首頁 > php教程 > php手册 > 方法重載(重寫)/方法覆蓋、魔術函數實現

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

WBOY
發布: 2016-10-24 00:00:00
原創
1793 人瀏覽過


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


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

上面的這種用法是不對的

魔術函數 方法重載實作

echo "接受一個參數";}
public function test1($p){
echo "接受二個參數";}
}
提供一個__call
__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)

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

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

$dog1=new Dog();
$dog1->cry();

$pig=1new Pig();

$pig1->cry();
?>

關於重寫:
當一個父類別知道所有的子類別都有一個方法但是父類別不能確定該方法究竟如何寫,可以讓子類別去覆蓋這個方法

1.要實現重寫,要求子類別的那個方法的名字和參數清單一模一樣,但是並不要求參數名稱一樣

2.如果子類別要求呼叫父類別的某個方法(public/protected)則可以使用parent::方法名稱(參數...),父類別名稱::方法名稱(參數...)
3.實現方法覆蓋的時候,存取修飾符可不一樣,但是必須滿足子類別的存取範圍>=父類別的存取範圍


多態體現在什麼地方

當子類沒用覆蓋父類的方法則$call->cry()調用的是父類,子類覆蓋父類的方法則調用自己的cry( )



來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門推薦
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板