


PHP は func_get_arg、func_get_args、func_num_args を使用して擬似 overload_PHP チュートリアルを実装します
Jul 13, 2016 am 10:14 AMphp 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()に特定の値が存在するかどうかを検出します))

人気の記事

人気の記事

ホットな記事タグ

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法
