とぎぷろべい

包丁研ぎとプログラミングと米国株投資についてのなんやかんや

デフォルト引数について(PHP)

f:id:feci:20210727001932j:plain

PHP7

 

PHP7.4.1におけるデフォルト引数について。

<?php

function aaa($a, $b='・') {    //パラメータが2つあるaaa関数
  foreach ($a as $ak => $av) { //$aのキーを$akに、$aの値を$avに代入してループ
    echo "{$b}{$ak}:{$av}\n";
  }
}

$bbb = [                       //$aに代入する用の連想配列
  'a' => 'あいうえお',
  'ka' => 'かきくけこ',
  'sa' => 'さしすせそ'
];

$aaa = aaa($bbb, ' → '); //2つのパラメータを指定してaaa関数を実行
$ccc = aaa($bbb);         //指定が必須の$a用のパラメータだけ指定してaaa関数を実行
echo $aaa;                //→a:あいうえお($bのデフォルト引数が上書きされる)
echo $ccc;                //・a:あいうえお($bはデフォルト引数で実行)

デフォルト引数とは、関数のパラメータにあらかじめ値を代入しておくことです。

 

こうすることで、例えば上記スクリプトのようなパラメータが2つある関数を実行するときには、$aに代入されるパラメータを指定するだけでaaa関数を実行できるようになります。

通常どおり2つのパラメータを指定してaaa関数を実行した場合は、$bの値は指定した引数に上書きされます。

 

デフォルト引数で注意する点としては、「デフォルト引数があるパラメータ」を「指定が必要なパラメータ」の前に記述してはいけないという点です。

PHPでは関数の実行時のパラメータは、位置引数として関数内のパラメータに代入されます。

 

ということは、もし「デフォルト引数のあるパラメータ」を「指定が必須のパラメータ」の前に記述してしまうと、デフォルト引数を指定した意味がなくなるということになってしまいます。

 

関数実行時に指定したパラメータは、位置引数として関数に渡されますからね。

0番目のパラメータをすっ飛ばして1番目のパラメータを指定することは、現バージョンのPHPでは不可能です。

 

 

以上です。