この記事では、主に PHP でオーバーロードを実装する一般的な方法を紹介します。PHP でのオーバーロードの 4 つの一般的な実装テクニックを、例の形式で Java と比較して分析します。 PHP でのオーバーロードの実装。一般的に使用されます。参考までに皆さんと共有してください。詳細は次のとおりです:
php は弱い型付け言語であり、JAVA のような強く型付けされた言語のようなオーバーロードがありません。
オーバーロードとは一般に、関数名またはメソッド名は同じだが、パラメータリスト(パラメータの数やパラメータの型を含む)が異なることを意味します
この定義から、PHPではオーバーロードが許可されていないため、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 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 function sum($var1,$var2,$var3=NULL){//$var3设置默认值 echo $var1+$var2+$var3; } sum(1,2);//2 sum(1,2,3);//2.5 ?>
3. 変数パラメータ は主に次の 2 つの関数を使用します:
func_num_args() 関数のパラメータの数を返します
func_get_args()
関数パラメータのリストを含む配列を返します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()
public mixed __call ( string $name , array $arguments )
在对象中调用一个不可访问的方法时,__call()
具体的な実装方法:
<?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"); ?>4。マジックメソッド __call() を使用します
public mixed __call ( string $name , array $arguments )
__call() 自動的に呼び出されます🎜🎜🎜$name🎜パラメータは呼び出されるメソッドの名前です🎜$argument🎜パラメータは呼び出されるメソッドのパラメータ配列です🎜🎜具体的な実装方法は上記の3番目の点と同様です: 🎜🎜🎜🎜りー
以上がPHPでオーバーロードを実装する方法の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。