程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php利用func_get_arg,func_get_args,func_num_args實現偽重載

php利用func_get_arg,func_get_args,func_num_args實現偽重載

編輯:關於PHP編程

php利用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 卻可以直接解決相關問題。具體舉個示例代碼如下:

<?php
function  testOne($a) {
echo ('一個參數就這樣 ');
}
function testTwo($a, $b) {
	echo ('兩個參數的就這樣 ');
}
function testThree($a, $b, $c) {
	echo ('呵呵,這是三個參數的 ');
}
function test() {
	$argNum = func_num_args();
	// 這一段其實可以用 $_arg = func_get_args() 來獲得所有的參數,只是要用數組而已,不方便我下面的表達,呵呵
	for ($i = 0; $i < $argNum; $i++) {
		$_arg_{$i} = func_get_arg($i);
	}
	switch ($argNum) {
		case 1 :
			testOne($_arg_1);
		break ;
		case 2 :
			testTwo($_arg_1, $_arg_2);
		break ;
		case 3 :
			testThree($_arg_1, $_arg_2, $_arg_3);
		break ;
		default :
			echo (' 這是沒有參數的情況 ');
		break ;
	}
}
/**
 * 例子的實現
 */
test();
echo ('<br>');
test(1);
echo ('<br>');
test(1, 2);
echo ('<br>');
test(1, 2, 3);
// 這些只是在函數中的運用,其實最主要的還是在類中的運用
// 如果這些用到類裡面我就不需要擔心構造函數是否有幾個參數了,不是嗎?
// 類裡面的運用只舉一個簡單的例子
class test{
	var $a = 0;
	var $b = 0;
	function test() {
		$argNum = func_num_args();
		$_arg = func_get_args();
		switch ($argNum) {
			case 1 :
				$this->test1($_arg[0]);
			break ;
			case 2 :
				$this->test2($_arg[0], $_arg[1]);
			break;
			default :
				$this->a = 0;
				$this->b = 1;
			break;
		}
	}
	function test1($a) {
		$this->a = $a;
	}
	function test2($a, $b) {
		$this->a = $a;
		$this->b = $b ;
	}
}

您可能感興趣的文章

  • php利用session_set_save_handler()函數將session保存到MySQL數據庫中
  • PHP 利用 Curl Functions 實現多線程抓取網頁和下載文件
  • 關於使用in_array() foreach array_search() 查找數組是否包含時的性能對比
  • php利用array_flip實現數組鍵值交換去除數組重復值
  • php利用filter函數驗證郵箱、url和ip地址的方法
  • PHP中file_get_contents於curl性能效率比較
  • 用PHP函數memory_get_usage獲取當前PHP內存消耗量以實現程序的性能優化
  • php在數組中查找某個值是否存在(in_array(),array_search(),array_key_exists())

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved