ホームページ >バックエンド開発 >PHPチュートリアル >PHP関数のオーバーロードとは何ですか?関数オーバーロードの使用方法の詳細な説明

PHP関数のオーバーロードとは何ですか?関数オーバーロードの使用方法の詳細な説明

伊谢尔伦
伊谢尔伦オリジナル
2017-07-08 09:25:391678ブラウズ

弱く型付けされた言語の場合、PHP 関数オーバーロードは一般的な OOP とは異なります。

関数のオーバーロードは、

1、関数パラメータの数が異なるという2つの条件を満たす必要があるためです。

2.パラメータの種類が異なります。

PHP はこれら 2 つの点を満たすことができません。関数にパラメータを追加することは、追加の一時変数を渡すことと同じです。弱い型は本質的に区別されていないため、これらを介して実装することはできません。

ただし、次の方法で簡単な擬似オーバーロードを実現できます。

1. デフォルトパラメータ

上記からわかるように、関数内の必須ではないパラメータに対応するデフォルト値を追加すると、対応する関数が完成します。

  function overloadFun($param1, $param2 = '1',$param3 = true)
  {
  // do something 
  }

2. 関数 func_get_args() と call_user_func_array() を使用します。詳細については、

PHP マニュアル を参照してください。

一元管理を容易にするために、通常の関数を呼び出して使用します。

function overloadFun()  
{  
    // overloadFun可以随便定义,但为了命名规范,建议宝贝为与此函数名一样,  
    // 后面的尾随数值为参数个数,以方便管理  
$name="overloadFun".func_num_args();   
  return call_user_func_array(array($this,$name), func_get_args());       
}  
  
function overloadFun0()  
{  
    // do something  
}  
  
function overloadFun1()  
{  
    // do something  
}  
  
function overloadFun2()  
{  
    // do something  
}

3. call($name, $arg) 関数を使用して処理します。

function call($name, $args)  
{  
    if($name=='overloadFun')  
    {  
        switch(count($args))  
        {  
            case 0: $this->overloadFun0();break;  
            case 1: $this->overloadFun1($args[0]); break;  
            case 2: $this->overloadFun2($args[0], $args[1]); break;  
            default: //do something  
              break;  
        }  
    }  
}  
  
function overloadFun0()  
{  
    // do something  
}  
  
function overloadFun1()  
{  
    // do something  
}  
  
function overloadFun2()  
{  
    // do something  
}

まとめると、これらのメソッドはすべて擬似オーバーロードを実現できます。基本的に、2 番目と 3 番目のメソッドは相互に内容を処理および判断できます。


この記事ではメソッドのみを説明します。整数の型やカテゴリの決定など、処理する必要がある詳細が多数ある場合があります。

ただし、上記の内容によると、phpが本当にオーバーロードすることは決してない可能性があり、その場合は言語自体の意味が失われます。

以上がPHP関数のオーバーロードとは何ですか?関数オーバーロードの使用方法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。