This article is a Private article. Only a writer and users who know the URL can access it.
Please change open range to public in publish setting if you want to share this article with other users.

デフォルト引数

Posted at

デフォルト引数

通常の引数

<?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を出力
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up