ホームページ  >  記事  >  バックエンド開発  >  PHP変数パラメータの実装

PHP変数パラメータの実装

PHP中文网
PHP中文网オリジナル
2017-03-22 16:17:141907ブラウズ

編集者注: 最初に考えたのは、配列を使用するか、C 言語のマクロを使用することでしたが、PHP には別の実装方法があることをインターネットで見つけたので、記事をここに転載します

まず、 PHP 2 つの数値の合計を計算する関数は次のように記述できます:

/**
 *计算两个数的和,并返回计算的结果
 * @param number $a
 * @param number $b
 * @return number
 */
function sum($a, $b){
    return $a + $b;
}

同様に、3 つの数値の合計を計算する必要がある場合は、次のように記述できます:

/**
 *计算两个或三个数的和,并返回计算的结果
 * @param number $a
 * @param number $b
 * @return number $c 该参数可以不传入值,默认为0
 */
function sum($a, $b, $c =0){
    return $a + $b + $c;
}

この時点で、任意の数値の合計を計算するには、PHP 関数をどのように記述する必要があるでしょうか?

もちろん、そのような関数を実現するために、関数の引き渡しパラメータとして配列を使用することを検討することもできます:

/**
 *计算任意多个数的和,函数参数params必须为array类型
 * @param array params
 */
function sum($params){
    $total =0;
    foreach($params as $i){
        $total += $i;
    }
    return $total;
}

まあ、確かに、このアプローチには何の問題もありません。なぜなら、プログラム開発プロセスでは、変数パラメータが誕生する前だからです。 , 任意の数のパラメーターを渡す必要がある場合、それらは配列またはその他の同様のコレクションで表されます。しかし、この種の伝達は十分に明確で直感的だと思いませんか? PHP プログラマーは、変数に関する詳細情報を表示するための関数 var_dump() が PHP にあることを知っておく必要があります。たとえば、次のようになります。

$age =18;
var_dump($age);//显示变量$age的详细信息

複数の変数に関する情報を表示する必要がある場合は、次のように使用することもできます:

$name ='张三';
$age =18;
$gender =true;
var_dump($name, $age, $gender);

var_dump() は同時に任意の数の変数を受け取ることができ、配列の形式で渡す必要がないことがわかっています。このパラメーターの受け渡し方法はより直感的で洗練されています。任意の数のパラメーターを渡すこの形式は、変数パラメーターと呼ばれます。もちろん、 sum() 関数は次の方法でも実装できます:

/**
 *计算任意多个数的和,并返回计算后的结果
 */
function sum(){  //这里的括号中没有定义任何参数
    $total =0;
    //使用func_get_args()来获取当前函数的所有实际传递参数,返回值为array类型
    $varArray = func_get_args();
    foreach($varArray as $var){
        $total += $var;
    }
    return $total;
}

/*****以下は呼び出し例です*****/

echo sum(1,3,5);  //计算1+3+5
echo sum(1,2);//计算1+2
echo sum(1,2,3,4);   //计算1+2+3+4

上の例に示すように、単に PHP 組み込み関数 func_get_args() を使用します。現在の関数を使用すると、関数の呼び出し時に渡される実際のパラメーター配列を取得できるので、パラメーター配列を処理するだけで済みます。

注 1: 1. 呼び出し時にパラメーターが渡されない場合、関数 func_get_args() は配列型を返しますが、空の配列になります (配列には要素が含まれません)。 2.func_get_args() は関数内でのみ呼び出すことができ、それ以外の場合は警告メッセージが表示されます。 3. func_get_args() 関数はインデックス パラメータを受け取り、パラメータ配列内の指定されたインデックスにあるパラメータを取得できます。たとえば、渡された最初の引数を取得したい場合は、func_get_args(1) を呼び出します。 4. さらに、関数内で func_num_args() を呼び出すこともできます。これにより、現在の関数呼び出しで渡されたパラメータの数を返すことができます。

注 2: PHP での変数パラメーターの実装は、JavaScript での変数パラメーターの実装と非常によく似ています。PHP は組み込み関数 func_get_args() を使用して実装し、JavaScript は組み込み関数の変数引数を使用して実装します。それ。

注釈 3: 最後の sum() 関数コードでは、sum() 関数は仮パラメータを定義していないため、この関数を呼び出すときに 0、1、2~n のパラメータを渡すことができます。ただし、一般に、合計を計算するには少なくとも 2 つの数値が必要です。したがって、sum() 関数の定義で 2 つの仮パラメータ (例: sum($a, $b)) を定義でき、他のコードは変更されません。このように、この関数を呼び出すときは、少なくとも 2 つのパラメーターを渡す必要があります。

注4: PHPには配列内のすべての要素の合計を計算する組み込み関数array_sum()があるため、上記のコードの最終バージョンは次のようになります:

/**
 *计算任意多个数的和,并返回计算后的结果
 */
function sum($a, $b){
    return array_sum(func_get_args());
}

上記では、以下を含むPHP変数パラメータの実装が導入されています。 PHP チュートリアルに興味がある方の参考になれば幸いです。

関連記事:

php 配列の各要素を可変パラメータ関数の実パラメータとして渡すにはどうすればよいですか?

phpの変数パラメータ

変数パラメータを関数に渡す際のJSとPHPの違いのサンプルコード

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