PHP实现重载的常用方法实例详解
发布:smiling 来源: PHP粉丝网 添加日期:2021-08-13 10:10:50 浏览: 评论:0
这篇文章主要介绍了PHP实现重载的常用方法,结合实例形式对比java分析了php实现重载的四种常见实现技巧,需要的朋友可以参考下。
本文实例讲述了PHP实现重载的常用方法,分享给大家供大家参考,具体如下:
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语言实现:
- <?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. 可选参数,允许变量设置默认值
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可选参数特性实现:
- <?php
- function sum($var1,$var2,$var3=NULL){//$var3设置默认值
- echo $var1+$var2+$var3;
- }
- sum(1,2);//2
- sum(1,2,3);//2.5
- ?>
可以看到同样的功能,但是php这种弱类型语言实现起来更简单
3. 可变参数
主要用到以下两个函数:
func_num_args() 返回函数的参数个数
func_get_args() 返回一个包含函数参数列表的数组
具体实现方式:
- <?php
- class 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参数是被调用方法的参数数组
具体实现方式类似上面的第三要点:
- <?php
- class 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");
- ?>
Tags: PHP重载
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)