方法重載
函數名不一樣透過函數的參數數量或參數型別不同,達到呼叫同一個函數名,但是可以區分不同的函數
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){
if($method=="test1"){
if(count($p)==1){
$this->test1($p);
}else if(count( $p)==2){
$this->test2($p);
}
}
}
$a->test(1);
$a->test(1,2);
魔術函數
__set,__get,__construct,__destruct,__call,__isset,__unset
,__FILE__輸出檔名
,__DIR__,
__CLASS__輸出類名
方法重寫/方法覆蓋(overload)
class Dog extends Animal{
//覆蓋
function cry(){
echo "小狗";}
}
class Pig extends Animal{
//覆蓋小肉;}
}
$dog1=new Dog();
$dog1->cry();
$pig1->cry();
?>
關於重寫:
當一個父類別知道所有的子類別都有一個方法但是父類別不能確定該方法究竟如何寫,可以讓子類別去覆蓋這個方法
2.如果子類別要求呼叫父類別的某個方法(public/protected)則可以使用parent::方法名稱(參數...),父類別名稱::方法名稱(參數...)
3.實現方法覆蓋的時候,存取修飾符可不一樣,但是必須滿足子類別的存取範圍>=父類別的存取範圍
多態體現在什麼地方