php類重載
阿新 • • 發佈:2019-03-30
大於 重新定義 cal this pub load UNC pan 修飾
首先,因為PHP是弱類型語言,是不直接支持重載的,不過可以通過一些方法來實現重載。
先說一下重寫
在子類繼承父類方法後,自己重新定義父類的方法,包含函數名,形參(個數,順序)完全相同,但權限修飾符可不同,子類的的權限修飾符應該大於等於父類的權限修飾符。
class Animal{ public function cat($var1,$var2) { echo ‘Hello,‘.$var1.$var2; } } class Small extends Animal{public function cat($a1, $a2){ echo ‘cat cat cat!!!‘.$a1.$a2; } } $a = new Small(); $a->cat(1,2); $b = new Animal(); $b->cat(‘laibao‘,‘hh‘);
重載,多態的一種形式,通過對同一函數傳值的不同,來獲取不同的邏輯處理。但PHP是弱類型語言,不像JAVA、C++一樣強類型,直接支持重載,不過 可以通過以下方式來間接的實現重載。
<?php function test1($name){ echo $name; } function test2($name,$age){ echo $name.$age; } function load(){//返回輸入的元素數目 $num=func_num_args(); //返回輸入元素列表的數組形式 $arr=func_get_args(); if($num==1){ test1($arr[0]); }else { test2($arr[0],$arr[1]); } } load("a"); echo ""; load("a","b"); ?>
<?php class A{ //name :調用的方法名字。args:參數列表 function __call($name,$args){ $num=count($args); if($num==1){ $this->test1($args[0]); } else { $this->test2($args[0],$args[1]); } } function test1($name){ echo $name; } function test2($name, $age){ echo $name." ".$age; } } $a=new A(); $a->a("a"); echo ""; $a->a("a","b"); ?>
php類重載