ホームページ  >  記事  >  バックエンド開発  >  PHP 関数のオーバーロードの分析と例

PHP 関数のオーバーロードの分析と例

墨辰丷
墨辰丷オリジナル
2018-05-16 13:40:181503ブラウズ

この記事では主に PHP 関数のオーバーロード解析と例を紹介します。興味のある方はぜひ参考にしてください。

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

関数のオーバーロードは次の 2 つの条件を満たす必要があるためです:

1. 関数のパラメーターの数が異なります。

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_PHPチュートリアルでの関数オーバーロードの別の方法

phpでの関数オーバーロードの別の方法--疑似オーバーロードの詳細説明、オーバーロードの詳細説明_PHPチュートリアル

以上がPHP 関数のオーバーロードの分析と例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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