本文實(shí)例講述了PHP實(shí)現(xiàn)重載的常用方法。分享給大家供大家參考,具體如下:
php是弱類型語(yǔ)言,并沒(méi)有像JAVA這種強(qiáng)類型語(yǔ)言一樣有重載。
重載一般來(lái)說(shuō)就是擁有相同的函數(shù)名或方法名,但是參數(shù)列表卻不同(包括參數(shù)個(gè)數(shù)和參數(shù)類型)
從這個(gè)定義來(lái)說(shuō),php是沒(méi)有重載的,因?yàn)閜hp不允許存在相同的函數(shù)名。
但是沒(méi)有并不意味著不能實(shí)現(xiàn)。
php有四種機(jī)制可以實(shí)現(xiàn)重載:(下面用java進(jìn)行對(duì)比)
1. 弱類型,無(wú)需定義變量類型
先舉一個(gè)JAVA重載的例子:
class demo
{
public static void main (String[] args)
{
sum(1,1);//2
sum(1,1.5);//2.5
sum(1.5,1.5);//3.0
}
public static void sum(int var1,int var2){
System.out.println(var1+var2);
}
public static void sum(int var1,double var2){
System.out.println(var1+var2);
}
public static void sum(double var1,double var2){
System.out.println(var1+var2);
}
}
上面的代碼如果用php語(yǔ)言實(shí)現(xiàn):
?php
function sum($var1,$var2){
echo $var1+$var2;
}
sum(1,1);//2
sum(1,1.5);//2.5
sum(1.5,1.5);//3
?>
2. 可選參數(shù),允許變量設(shè)置默認(rèn)值
JAVA重載例子:
class demo
{
public static void main (String[] args)
{
sum(1,2);//3
sum(1,2,3);//6
}
public static void sum(int var1,int var2){
System.out.println(var1+var2);
}
public static void sum(int var1,int var2,int var3){
System.out.println(var1+var2+var3);
}
}
用php可選參數(shù)特性實(shí)現(xiàn):
?php
function sum($var1,$var2,$var3=NULL){//$var3設(shè)置默認(rèn)值
echo $var1+$var2+$var3;
}
sum(1,2);//2
sum(1,2,3);//2.5
?>
可以看到同樣的功能,但是php這種弱類型語(yǔ)言實(shí)現(xiàn)起來(lái)更簡(jiǎn)單
3. 可變參數(shù)
主要用到以下兩個(gè)函數(shù):
func_num_args()
返回函數(shù)的參數(shù)個(gè)數(shù)
func_get_args()
返回一個(gè)包含函數(shù)參數(shù)列表的數(shù)組
具體實(shí)現(xiàn)方式:
?php
class demo{
public function method(){
$numargs = func_num_args();//獲得參數(shù)數(shù)量
$args = func_get_args();//獲得參數(shù)數(shù)組
switch ($numargs) {//通過(guò)變量個(gè)數(shù)來(lái)確定調(diào)用哪個(gè)方法
case 2:
$this->method2($args[0],$args[1]);
break;
case 3:
$this->method3($args[0],$args[1],$args[2]);
break;
}
}
private function method2($var1,$var2){
#code...
}
private function method3($var1,$var2,$var3){
#code...
}
}
//調(diào)用
$obj = new demo();
$obj->method('var1','var2');
$obj->method('var1','var2','var3');
//看起來(lái)似乎通過(guò)一個(gè)接口調(diào)用
//但其實(shí)內(nèi)部已經(jīng)調(diào)用了各自定義的方法
?>
4. 使用魔術(shù)方法 __call()
public mixed __call ( string $name , array $arguments )
在對(duì)象中調(diào)用一個(gè)不可訪問(wèn)的方法時(shí),__call()
會(huì)被自動(dòng)調(diào)用
$name參數(shù)是要調(diào)用的方法名稱 $argument參數(shù)是被調(diào)用方法的參數(shù)數(shù)組
具體實(shí)現(xiàn)方式類似上面的第三要點(diǎn):
?php
class demo{
public function __call($name,$arguments){
if($name == "method"){
switch (count($arguments)) {//獲得參數(shù)數(shù)組個(gè)數(shù)
case 2:
$this->method2($args[0],$args[1]);
break;
case 3:
$this->method3($args[0],$args[1],$args[2]);
break;
}
}
}
private function method2($var1,$var2){
#code...
}
private function method3($var1,$var2,$var3){
#code...
}
}
//調(diào)用
$obj = new demo();
$obj->method("var1","var2");
$obj->method("var1","var2","var3");
?>
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《PHP數(shù)組(Array)操作技巧大全》、《PHP基本語(yǔ)法入門教程》、《PHP運(yùn)算與運(yùn)算符用法總結(jié)》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫(kù)操作入門教程》及《php常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
您可能感興趣的文章:- php面向?qū)ο蟮姆椒ㄖ剌d兩種版本比較
- php繼承中方法重載(覆蓋)的應(yīng)用場(chǎng)合
- PHP使用方法重載實(shí)現(xiàn)動(dòng)態(tài)創(chuàng)建屬性的get和set方法
- PHP利用func_get_args和func_num_args函數(shù)實(shí)現(xiàn)函數(shù)重載實(shí)例
- php中拷貝構(gòu)造函數(shù)、賦值運(yùn)算符重載
- PHP小技巧之函數(shù)重載
- PHP面相對(duì)象中的重載與重寫
- PHP面向?qū)ο蟪绦蛟O(shè)計(jì)重載(overloading)操作詳解
- PHP面向?qū)ο蟪绦蛟O(shè)計(jì)模擬一般面向?qū)ο笳Z(yǔ)言中的方法重載(overload)示例
- php魔術(shù)函數(shù)__call()用法實(shí)例分析
- PHP __call()方法實(shí)現(xiàn)委托示例
- php 使用 __call實(shí)現(xiàn)重載功能示例