ホームページ >バックエンド開発 >PHPチュートリアル >PHP は func_get_arg、func_get_args、func_num_args を使用して擬似 overload_PHP チュートリアルを実装します

PHP は func_get_arg、func_get_args、func_num_args を使用して擬似 overload_PHP チュートリアルを実装します

WBOY
WBOYオリジナル
2016-07-13 10:14:12834ブラウズ

php uses func_get_arg, func_get_args, func_num_args toimple pseudo-overloading

phpの擬似オーバーロードに関する話題をインターネット上で時々見かけ、興味を持って勉強していました。以下の著者は、PHP が func_get_arg、func_get_args、および func_num_args を使用して関数の疑似オーバーロードを実装する方法について説明します。

まず、メソッドのオーバーロードの利点について話しましょう:

メソッドのオーバーロードを実装するために、異なるパラメーターの型やパラメーターの数に対して複数の関数を作成する必要はありません。複数の関数は同じ名前を使用しますが、呼び出し時にパラメーターのリスト、つまりパラメーターの数または (および) データ型が異なる場合があります。メソッド名は同じでも、対応する関数はそれに応じて自動的に呼び出されます。パラメータリスト。 Microsoft によって作成された .net 基本クラス ライブラリをリフレクターを使用してチェックすると、多くのメソッドのオーバーロードが使用されていることがわかります。そのため、それを呼び出すときに、それほど多くのメソッド名を覚える必要はありませんが、メソッド 関数はさまざまなパラメータを直接渡すことができ、コンパイラはどのメソッドを呼び出したかを明確に認識します。

しかし、PHP には関数のオーバーロードの概念がないため、多くの場合、次のような関連する問題を解決するために、関数の後に N 個のパラメーターを定義する必要さえあります。 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() 関数を使用してセッションを MySQL データベースに保存します
  • PHP は Curl 関数を使用してマルチスレッド Web クローリングとファイルのダウンロードを実装します
  • in_array() foreach の使用についてarray_search() 配列に含まれるかどうかを調べるときのパフォーマンスの比較
  • php は array_flip を使用して配列のキーと値の交換を実装し、配列の重複値を削除します
  • php はフィルター関数を使用して電子メール、URL、および IP アドレスを検証します
  • パフォーマンスの比較PHPのfile_get_contentsとcurlの間の効率性
  • PHP関数memory_get_usageは、プログラムのパフォーマンスを最適化するために現在のPHPメモリ消費量を取得します
  • phpは、配列(in_array()、array_search()、array_key_exists()に特定の値が存在するかどうかを検出します))

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/910766.html技術記事 PHP は、func_get_arg、func_get_args、func_num_args を使用して擬似オーバーロードを実装します。時々、インターネットで PHP の擬似オーバーロードに関する問題を見かけ、興味を持って勉強しました。以下の著者が php...
の仕組みについてお話します。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。