www.adminn.cn
站长正能量分享网!

php中func_get_arg,func_get_args,func_num_args实现伪重载

AD:阿里云服务器企业会员更优惠 腾讯云香港,韩国免备案服务器1.8折优惠

我们知道在PHP中没有函数重载这个概念,让很多时候我们无法进行一些处理,甚至有时候不得不在函数后面定义好N个参数只有使用func_get_arg,func_get_args,func_num_args实现伪重载了,下面一起来看看吧.

偶尔在网上看到关于php的伪重载的问题,有点兴趣便研究了一下,下面作者将说说php如何利用func_get_arg,func_get_args,func_num_args实现函数的伪重载问题.

首先说说方法重载的好处:

实现方法重载可以不用为了对不同的参数类型或参数个数,而写多个函数,多个函数用同一个名字,但参数表,即参数的个数或(和)数据类型可以不同,调用的时候,虽然方法名字相同,但根据参数表可以自动调用对应的函数,如果我们使用reflector去查看微软写的.net的基类库的话,我们可以发现他使用很多的方法重载,这样我们在调用的时候,就不需要记那么多的方法名称,而是知道了方法的功能就可以直接的给他传递不同的参数,编译器会明确的知道我们调用了哪一个方法.

但是在PHP中没有函数重载这个概念,让很多时候我们无法进行一些处理,甚至有时候不得不在函数后面定义好N个参数来解决相关问题,而php提供了几个函数,比如:func_get_arg,func_get_args,func_num_args 却可以直接解决相关问题,具体举个示例代码如下:

  1. <?php 
  2. function  testOne($a) { 
  3. echo ('一个参数就这样 '); 
  4. function testTwo($a$b) { 
  5.  echo ('两个参数的就这样 '); 
  6. function testThree($a$b$c) { 
  7.  echo ('呵呵,这是三个参数的 '); 
  8. }  //开源软件:phpfensi.com 
  9. function test() { 
  10.  $argNum = func_num_args(); 
  11.  // 这一段其实可以用 $_arg = func_get_args() 来获得所有的参数,只是要用数组而已,不方便我下面的表达,呵呵 
  12.  for ($i = 0; $i < $argNum$i++) { 
  13.   $_arg_{$i} = func_get_arg($i); 
  14.  } 
  15.  switch ($argNum) { 
  16.   case 1 : 
  17.    testOne($_arg_1); 
  18.   break ; 
  19.   case 2 : 
  20.    testTwo($_arg_1$_arg_2); 
  21.   break ; 
  22.   case 3 : 
  23.    testThree($_arg_1$_arg_2$_arg_3); 
  24.   break ; 
  25.   default : 
  26.    echo (' 这是没有参数的情况 '); 
  27.   break ; 
  28.  } 
  29. /** 
  30.  * 例子的实现 
  31.  */ 
  32. test(); 
  33. echo ('<br>'); 
  34. test(1); 
  35. echo ('<br>'); 
  36. test(1, 2); 
  37. echo ('<br>'); 
  38. test(1, 2, 3); 
  39. // 这些只是在函数中的运用,其实最主要的还是在类中的运用 
  40. // 如果这些用到类里面我就不需要担心构造函数是否有几个参数了,不是吗? 
  41. // 类里面的运用只举一个简单的例子 
  42. class test{ 
  43.  var $a = 0; 
  44.  var $b = 0; 
  45.  function test() { 
  46.   $argNum = func_num_args(); 
  47.   $_arg = func_get_args(); 
  48.   switch ($argNum) { 
  49.    case 1 : 
  50.     $this->test1($_arg[0]); 
  51.    break ; 
  52.    case 2 : 
  53.     $this->test2($_arg[0], $_arg[1]); 
  54.    break
  55.    default : 
  56.     $this->a = 0; 
  57.     $this->b = 1; 
  58.    break
  59.   } 
  60.  } 
  61.  function test1($a) { 
  62.   $this->a = $a
  63.  } 
  64.  function test2($a$b) { 
  65.   $this->a = $a
  66.   $this->b = $b ; 
  67.  } 
  68. ?> 

友情提示:

php的的func_num_args、func_get_arg和func_get_args都是返回函数实参相关的函数.

func_num_args:实参个数;

func_get_arg:返回某一个实参,必须事实参数组的索引;

func_get_args:返回实参数组;

模板优惠价: (点击购买)
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《php中func_get_arg,func_get_args,func_num_args实现伪重载》
文章链接:https://www.adminn.cn/news/6616.html
本站资源模板仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。2021.5月起,网站调整,暂不再分享免费模板。谢谢理解

Adminn.Cn 站长分享圈

帝国CMS精品模板腾讯云优惠券,代金券

本站源码仅供本地环境下学习借鉴研究使用!

源码请勿用于任何涉灰站点!净化网络,站长更有责!

支付宝扫一扫打赏