首先,因为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"); ?>