弱く型付けされた言語の場合、PHP 関数のオーバーロードは一般的な OOP とは異なります。弱い型は本質的に区別されていないため、これらを介して実装することはできません。ただし、次の方法で単純な擬似オーバーロードを実現できます。
関数のオーバーロードの代替 - 疑似オーバーロード 具体的なサンプルコードを見てみましょう。
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
//関数のオーバーロードの代替 - 擬似オーバーロード // //確かに、PHP には関数のオーバーロードの概念がないため、多くの場合、一部の処理を実行できなくなり、関数の背後で N 個のパラメーターを定義しなければならない場合もあります //これら 3 つの関数、func_get_arg、func_get_args、および func_num_args を見たときに、何か思いつきましたか?
関数 testOne ( $a ) { echo (' パラメーターが 1 つだけ '); }
関数 testTwo ( $a , $b ){ echo ('2 つのパラメータについては以上です'); }
関数 testThree ($a, $b, $c) { echo (「ヘイヘイ、これは 3 つのパラメータです」); }
機能テスト() { $argNum = func_num_args (); // このセクションでは、実際に $_arg = func_get_args() を使用してすべてのパラメータを取得できますが、配列を使用する必要があるため、以下で表現するのは不便です、笑 for ( $i = 0 ; $i < $argNum ; $i ++ ) { $_arg_ { $i } = func_get_arg ( $i ); } スイッチ ( $argNum ) { ケース1: testOne( $_arg_1 ); 休憩; ケース2: testTwo( $_arg_1, $_arg_2 ); 休憩; ケース 3: testThree( $_arg_1, $_arg_2, $_arg_3 ); 休憩; デフォルト: echo ( 'これはパラメータなしの場合です ' ); 休憩; } } テスト(); エコー( ' ' ); テスト(1); エコー( ' ' ); テスト( 1 , 2 ); エコー( ' ' ); テスト( 1 , 2 , 3 );
// これらは関数内でのアプリケーションにすぎません。実際、最も重要なことはクラス内でのアプリケーションです //これらがクラスで使用されている場合、コンストラクターに複数のパラメーターがあるかどうかを心配する必要はありませんね?
クラステスト{ var $a = 0 ; var $b = 0 ;
機能テスト() { $argNum = func_num_args (); $_arg = func_get_args(); スイッチ ($argNum ) { ケース1: $this -> test1( $_arg [ 0 ] ); 休憩; ケース2: $this -> test2( $_arg [ 0 ] , $_arg [ 1 ]); 休憩; デフォルト: $this -> a = 0 ; $this -> b = 1 ; 休憩; } }
関数 test1 ($a) { $this -> a = $a ; }
関数 test2 ($a, $b) { $this -> a = $a ; $this -> b = $b ; } } ?> |
以上がこの記事の全内容ですが、皆さんに気に入っていただければ幸いです。