デフォルト引数
通常の引数
<?php
$price = 1000;
function with_tax($base_price, $tax_rate) {
$sum_price = $base_price + ($base_price * $tax_rate);
$sum_price = round($sum_price);
return $sum_price;
}
$price = with_tax($price, 0.1);
echo $price;
出力
1100
- $priceが1000円
- 関数with_taxの第一引数に1000円、第二引数に0.1
- $price(1000)が$base_priceに入る、0.1が$tax_rateに入る
- $sum_priceに1000 + 100が入る
- $sum_priceに1100の小数点四捨五入が入る(四捨五入今回は無し)
- 1080を戻り値として返す
- 返した戻り値が$priceに入る
- $priceを出力
デフォルト引数
※第二引数にデフォルト引数を設定
※関数実行時の引数は第一引数priceのみ
※関数宣言時と実行時で引数の数が異なるがエラーにはならない
※関数宣言時のtax_rate = 0.1がデフォルト引数と判定される
(イコールで記述しているのが重要)
<?php
$price = 1000;
function with_tax($base_price, $tax_rate = 0.1) {
$sum_price = $base_price + ($base_price * $tax_rate);
$sum_price = round($sum_price);
return $sum_price;
}
$price = with_tax($price);
echo $price;
出力(同じ)
1100
- $priceが1000円
- 関数実行時、with_taxの第一引数は1000のみを
- price(1000)がbase_priceに入る、ここでエラーが出そうだが出ずに、
tax_rate = 0.1というイコールの形を記述すれば、第二引数として判定してくれる
つまり0.1がtax_rateに入る
※関数実行時のpriceが第二引数として流用・判定されるかと思ったがそういうわけではない
あくまでイコールで記述することで引数と判定されるという挙動と思われる - $sum_priceに1000 + 100が入る
- $sum_priceに1100の小数点四捨五入が入る(四捨五入今回は無し)
- 1080を戻り値として返す
- 返した戻り値が$priceに入る
- $priceを出力
デフォルト引数は実行時の書き方で無視される
※上記と同じく、関数宣言時に第二引数にデフォルト引数(tax_rate = 0.1)を設定
※一方、関数宣言時には通常通り第二引数(0.08)を設定
※この場合は実行時の引数が優先され、宣言時の第二引数(0.1)は無視される
<?php
$price = 1000;
function with_tax($base_price, $tax_rate = 0.1) {
$sum_price = $base_price + ($base_price * $tax_rate);
$sum_price = round($sum_price);
return $sum_price;
}
$price = with_tax($price, 0.08);
echo $price;
出力
1080
- $priceが1000円
- 関数実行時、with_taxの第一引数は1000、第二引数に0.08を設定
- price(1000)がbase_priceに入る、第二引数にtax_rate = 0.1があるが、無視される
つまり0.08がtax_rateに入る - $sum_priceに1000 + 80が入る
- $sum_priceに1080の小数点四捨五入が入る(四捨五入今回は無し)
- 1080を戻り値として返す
- 返した戻り値が$priceに入る
- $priceを出力