PHP实现重载的常用方法实例详解


Posted in PHP onOctober 18, 2017

本文实例讲述了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");
?>

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
JAVA/JSP学习系列之七
Oct 09 PHP
php判断终端是手机还是电脑访问网站的思路及代码
Apr 24 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(五)
Jun 23 PHP
php实现扫描二维码根据浏览器类型访问不同下载地址
Oct 15 PHP
PHP设置进度条的方法
Jul 08 PHP
PHP实现上传文件并存进数据库的方法
Jul 16 PHP
php图片添加水印例子
Jul 20 PHP
thinkphp整合微信支付代码分享
Nov 24 PHP
Laravel框架实现利用中间件进行操作日志记录功能
Jun 06 PHP
浅谈PHP封装CURL
Mar 06 PHP
PHP实现限制域名访问的实现代码(本地验证)
Sep 13 PHP
JS中彻底删除JSON对象组成的数组中的元素
Sep 22 PHP
PHP接口继承及接口多继承原理与实现方法详解
Oct 18 #PHP
PHP二维关联数组的遍历方式(实例讲解)
Oct 18 #PHP
php中各种定义变量的方法小结
Oct 18 #PHP
php 算法之实现相对路径的实例
Oct 17 #PHP
php 二维数组快速排序算法的实现代码
Oct 17 #PHP
php 数据结构之链表队列
Oct 17 #PHP
PHP实现的贪婪算法实例
Oct 17 #PHP
You might like
超级简单的php+mysql留言本源码
2009/11/11 PHP
php中计算未知长度的字符串哪个字符出现的次数最多的代码
2012/08/14 PHP
php文件服务实现虚拟挂载其他目录示例
2014/04/17 PHP
PHP独立Session数据库存储操作类分享
2014/06/11 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
2020/02/27 PHP
JavaScript DOM学习第四章 getElementByTagNames
2010/02/19 Javascript
用jquery与css打造个性化的单选框和复选框
2010/10/20 Javascript
jQuery学习笔记 获取jQuery对象
2012/09/19 Javascript
JS图片切换的具体方法(带缩略图版)
2013/11/12 Javascript
php和js对数据库图片进行等比缩放示例
2014/04/28 Javascript
js获取json元素数量的方法
2015/01/27 Javascript
JavaScript原生对象之Date对象的属性和方法详解
2015/03/13 Javascript
深入解读JavaScript中的Iterator和for-of循环
2015/07/28 Javascript
node.js微信公众平台开发教程
2016/03/04 Javascript
jQuery遍历DOM节点操作之filter()方法详解
2016/04/14 Javascript
vue.js单页面应用实例的简单实现
2017/04/10 Javascript
jQuery Ajax自定义分页组件(jquery.loehpagerv1.0)实例详解
2017/05/01 jQuery
Vue.js中的computed工作原理
2018/03/22 Javascript
浅谈微信小程序flex布局基础
2018/09/10 Javascript
Vue-Ant Design Vue-普通及自定义校验实例
2020/10/24 Javascript
使用基于Python的Tornado框架的HTTP客户端的教程
2015/04/24 Python
Python实现模拟登录及表单提交的方法
2015/07/25 Python
Pandas库之DataFrame使用的学习笔记
2019/06/21 Python
Django实现发送邮件找回密码功能
2019/08/12 Python
详解python内置常用高阶函数(列出了5个常用的)
2020/02/21 Python
CSS3旋转——彩色扇子兼容firefox浏览器
2013/06/04 HTML / CSS
canvas线条的属性详解
2018/03/27 HTML / CSS
小学生自我评价范例
2013/09/24 职场文书
教师职称自我鉴定
2014/02/12 职场文书
机票销售员态度不好检讨书
2014/09/27 职场文书
个人师德师风自我剖析材料
2014/09/29 职场文书
建筑技术负责人岗位职责
2015/04/13 职场文书
2016个人先进事迹材料范文
2016/03/01 职场文书
中国十大神话动漫电影排行榜 哪吒登顶 白蛇缘起排第七
2022/03/21 国漫
《传颂之物 虚伪的假面》BD发售宣传CM公开
2022/04/04 日漫
《勇者辞职不干了》上卷BD发售宣传CM公开
2022/04/08 日漫