国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

php中func_get_arg,func_get_args,func_num_args實(shí)現(xiàn)偽重載

2024-09-04 11:49:14
字體:
供稿:網(wǎng)友

我們知道在PHP中沒有函數(shù)重載這個(gè)概念,讓很多時(shí)候我們無法進(jìn)行一些處理,甚至有時(shí)候不得不在函數(shù)后面定義好N個(gè)參數(shù)只有使用func_get_arg,func_get_args,func_num_args實(shí)現(xiàn)偽重載了,下面一起來看看吧.

偶爾在網(wǎng)上看到關(guān)于php的偽重載的問題,有點(diǎn)興趣便研究了一下,下面作者將說說php如何利用func_get_arg,func_get_args,func_num_args實(shí)現(xiàn)函數(shù)的偽重載問題.

首先說說方法重載的好處:

實(shí)現(xiàn)方法重載可以不用為了對不同的參數(shù)類型或參數(shù)個(gè)數(shù),而寫多個(gè)函數(shù),多個(gè)函數(shù)用同一個(gè)名字,但參數(shù)表,即參數(shù)的個(gè)數(shù)或(和)數(shù)據(jù)類型可以不同,調(diào)用的時(shí)候,雖然方法名字相同,但根據(jù)參數(shù)表可以自動(dòng)調(diào)用對應(yīng)的函數(shù),如果我們使用reflector去查看微軟寫的.net的基類庫的話,我們可以發(fā)現(xiàn)他使用很多的方法重載,這樣我們在調(diào)用的時(shí)候,就不需要記那么多的方法名稱,而是知道了方法的功能就可以直接的給他傳遞不同的參數(shù),編譯器會(huì)明確的知道我們調(diào)用了哪一個(gè)方法.

但是在PHP中沒有函數(shù)重載這個(gè)概念,讓很多時(shí)候我們無法進(jìn)行一些處理,甚至有時(shí)候不得不在函數(shù)后面定義好N個(gè)參數(shù)來解決相關(guān)問題,而php提供了幾個(gè)函數(shù),比如:func_get_arg,func_get_args,func_num_args 卻可以直接解決相關(guān)問題,具體舉個(gè)示例代碼如下:

  1. <?php 
  2. function  testOne($a) { 
  3. echo ('一個(gè)參數(shù)就這樣 '); 
  4. function testTwo($a$b) { 
  5.  echo ('兩個(gè)參數(shù)的就這樣 '); 
  6. function testThree($a$b$c) { 
  7.  echo ('呵呵,這是三個(gè)參數(shù)的 '); 
  8. }  //開源軟件:Vevb.com 
  9. function test() { 
  10.  $argNum = func_num_args(); 
  11.  // 這一段其實(shí)可以用 $_arg = func_get_args() 來獲得所有的參數(shù),只是要用數(shù)組而已,不方便我下面的表達(dá),呵呵 
  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 (' 這是沒有參數(shù)的情況 '); 
  27.   break ; 
  28.  } 
  29. /** 
  30.  * 例子的實(shí)現(xiàn) 
  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. // 這些只是在函數(shù)中的運(yùn)用,其實(shí)最主要的還是在類中的運(yùn)用 
  40. // 如果這些用到類里面我就不需要擔(dān)心構(gòu)造函數(shù)是否有幾個(gè)參數(shù)了,不是嗎? 
  41. // 類里面的運(yùn)用只舉一個(gè)簡單的例子 
  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都是返回函數(shù)實(shí)參相關(guān)的函數(shù).

func_num_args:實(shí)參個(gè)數(shù);

func_get_arg:返回某一個(gè)實(shí)參,必須事實(shí)參數(shù)組的索引;

func_get_args:返回實(shí)參數(shù)組;

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 金乡县| 邢台市| 南投市| 汽车| 黑山县| 岳池县| 邵阳市| 疏勒县| 革吉县| 专栏| 广河县| 公主岭市| 达州市| 沙雅县| 阜城县| 石嘴山市| 阿城市| 双流县| 万年县| 搜索| 县级市| 略阳县| 工布江达县| 南乐县| 榆社县| 芒康县| 凤山县| 浮山县| 霸州市| 玉山县| 滨州市| 额尔古纳市| 长兴县| 霍邱县| 珲春市| 师宗县| 方正县| 平舆县| 龙南县| 云浮市| 宕昌县|