php でオーバーロードを実装する方法: 1. 弱い型、変数の型を定義する必要なし; 2. オプションのパラメーター、変数にデフォルト値を設定できるようにする; 3. 変数パラメーター; 4. マジック メソッド [__call] を使用する() 】。
php でオーバーロードを実装する方法:
php は型付けが弱く、JAVA ほど強力ではありません。型言語にもオーバーロードがあります。
オーバーロードとは、通常、関数名またはメソッド名は同じだが、パラメーター リスト (パラメーターの数やパラメーターの型を含む) が異なることを意味します。
この定義から、PHP はオーバーロードされません。同じ関数名が存在することは許可されません。
しかし、それがないからといって達成できないわけではありません。
php にはオーバーロードを実現するための 4 つのメカニズムがあります: (以下の比較には Java が使用されています)
1. 弱い型、変数の型を定義する必要はありません
JAVA オーバーロードの例を示します:
class demo { public static void main (String[] args) { sum(1,1);//2 sum(1,1.5);//2.5 sum(1.5,1.5);//3.0 } public static void sum(int var1,int var2){ System.out.println(var1+var2); } public static void sum(int var1,double var2){ System.out.println(var1+var2); } public static void sum(double var1,double var2){ System.out.println(var1+var2); } }
上記のコードが PHP 言語で実装されている場合:
<?php function sum($var1,$var2){ echo $var1+$var2; } sum(1,1);//2 sum(1,1.5);//2.5 sum(1.5,1.5);//3 ?>
2. 変数にデフォルト値を設定できるオプションのパラメーター
JAVA オーバーロードの例:
class demo { public static void main (String[] args) { sum(1,2);//3 sum(1,2,3);//6 } public static void sum(int var1,int var2){ System.out.println(var1+var2); } public static void sum(int var1,int var2,int var3){ System.out.println(var1+var2+var3); } }
PHP のオプションのパラメーター機能を使用して実装:
<?php function sum($var1,$var2,$var3=NULL){//$var3设置默认值 echo $var1+$var2+$var3; } sum(1,2);//2 sum(1,2,3);//2.5 ?>
同じ関数が表示されますが、弱い型付け言語である PHP の方が簡単です。
3. 変数パラメータ
主に次の 2 つの関数を使用します:
func_num_args()
関数のパラメータの数を返す
func_get_args()
関数パラメータのリストを含む配列を返す
具体的な実装方法:
<?php class demo{ public function method(){ $numargs = func_num_args();//获得参数数量 $args = func_get_args();//获得参数数组 switch ($numargs) {//通过变量个数来确定调用哪个方法 case 2: $this->method2($args[0],$args[1]); break; case 3: $this->method3($args[0],$args[1],$args[2]); break; } } private function method2($var1,$var2){ #code... } private function method3($var1,$var2,$var3){ #code... } } //调用 $obj = new demo(); $obj->method('var1','var2'); $obj->method('var1','var2','var3'); //看起来似乎通过一个接口调用 //但其实内部已经调用了各自定义的方法 ?>
4. マジック メソッドを使用します __call()
publicmixed__call ( string $name , array $引数)
オブジェクト内でアクセスできないメソッドを呼び出すと、__call()
が自動的に呼び出されます。
$name パラメータは、呼び出されるメソッドの名前です。 called$ 引数パラメータは、呼び出されるメソッドのパラメータ配列です
具体的な実装方法は、上記の 3 番目の点と同様です:
<?php class demo{ public function __call($name,$arguments){ if($name == "method"){ switch (count($arguments)) {//获得参数数组个数 case 2: $this->method2($args[0],$args[1]); break; case 3: $this->method3($args[0],$args[1],$args[2]); break; } } } private function method2($var1,$var2){ #code... } private function method3($var1,$var2,$var3){ #code... } } //调用 $obj = new demo(); $obj->method("var1","var2"); $obj->method("var1","var2","var3"); ?>
関連する無料学習の推奨事項: phpプログラミング (ビデオ)
以上がPHPでオーバーロードを実装する方法は何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。