php实现重载
来源:互联网 发布:淘宝手机充值多久到账 编辑:程序博客网 时间:2024/06/03 06:40
php是弱类型语言,并没有像JAVA这种强类型语言一样有重载。
重载一般来说就是拥有相同的函数名或方法名,但是参数列表却不同(包括参数个数和参数类型)
从这个定义来说,php是没有重载的,因为php不允许存在相同的函数名。
但是没有并不意味着不能实现。
php有四种机制可以实现重载:(下面用java进行对比)
1.弱类型,无需定义变量类型
先举一个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语言实现:
<?phpfunction sum($var1,$var2){ echo $var1+$var2;}sum(1,1);//2sum(1,1.5);//2.5sum(1.5,1.5);//3?>
2.可选参数,允许变量设置默认值
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可选参数特性实现:
<?phpfunction sum($var1,$var2,$var3=NULL){//$var3设置默认值 echo $var1+$var2+$var3;}sum(1,2);//2sum(1,2,3);//2.5?>
可以看到同样的功能,但是php这种弱类型语言实现起来更简单
3.可变参数
主要用到以下两个函数:
func_num_args() 返回函数的参数个数
func_get_args() 返回一个包含函数参数列表的数组
具体实现方式:
<?phpclass demo{ public function method(){ $numargs = func_num_args();//获得参数数量 $args = func_get_args();//获得参数数组 switch ($numargs) {//通过变量个数来确定调用哪个方法 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... }}//调用$obj = new demo();$obj->method('var1','var2');$obj->method('var1','var2','var3');//看起来似乎通过一个接口调用//但其实内部已经调用了各自定义的方法?>
4.使用魔术方法 __call()
public mixed __call ( string $name , array $arguments )
在对象中调用一个不可访问的方法时,__call()会被自动调用
$name参数是要调用的方法名称 $argument参数是被调用方法的参数数组
具体实现方式类似上面的第三要点:
<?phpclass demo{ public function __call($name,$arguments){ if($name == "method"){ switch (count($arguments)) {//获得参数数组个数 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... }}//调用$obj = new demo();$obj->method("var1","var2");$obj->method("var1","var2","var3");?>
0 0
- php实现方法重载
- PHP实现函数重载
- PHP实现重载
- php实现重载
- PHP中实现重载的方法
- func_get_arg,func_get_args,func_num_args实现PHP伪重载
- func_get_arg,func_get_args,func_num_args实现PHP伪重载
- 使用PHP魔术方法实现重载
- 【PHP面向对象技术】PHP 实现函数重载
- PHP重载
- php 重载
- PHP 重载
- PHP重载
- PHP重载
- PHP重载
- php重载
- php 重载
- paip.编程语言方法重载实现的原理及python,php,js中实现方法重载
- ansible-playbook
- scikit-learn:0.3. 从文本文件中提取特征(tf、tf-idf)、训练一个分类器
- JDK目录结构和文件作用介绍
- Java操作excel-兼容office 2007版本之后
- Android SELinux 调试
- php实现重载
- android框架大全一
- ACM Poj1012 java版本
- 【分析方法论】属性对行为的影响分析
- AT命令测试工具 ATie
- 代码风格(仿Android SDK)
- 移植DynamixelSDK到Android平台
- 常见的GIT命令
- iOS UIWebView基础知识