PHP - 関数のパラメータ
関数を定義するとき、任意の値を引数(パラメータ)として渡すことができる。
渡す方法として、値渡し
と参照渡し
がある。
値渡しのパラメータ
大抵の場合は、こちらを使う。引数には任意の式を指定でき、式の内容が評価された後の値が関数に渡される。
<?php function greeting($name) { echo $name."さん。おはよう。"; } $name = "azunobu"; greeting($name);
例として、こういったかたちで書ける。
参照渡しのパラメータ
参照渡しでは、通常のスコープの規則を無視し、関数内から直接変数の値を操作する。そのため、参照渡しではパラメータとして変数を渡す必要がある。 参照で渡す、ということを明示するには関数のパラメータリストの引数名の前にアンパサンド記号(&)を付ける。
<?php function greeting(&$personName) { echo $personName."さん。おはよう。"; } $name = "azunobu"; greeting($name);
この例では、関数内の$personName
は参照渡しで渡されているので、直接$name
を参照している。
そのため、値の変更も関数内で直接変更を加えることができる。
また、参照渡しの主な恩恵としては、変数をコピーする必要がない。PHPでは、値渡しを行うと関数を実行する前に値の内容のコピーを作成する必要がある。 長い文字列や大きなオブジェクトの場合、このコピーは大きなコストになり実行速度にも影響を与えかねない。 参照渡しはこの点、コピーをせず直接参照できるため有利。
可変パラメータ
関数のパラメータの数を可変にしたい、という時もある。
PHP5.6以降であれば、パラメータリストに ... トークン
を含めることで、 その関数が可変長の引数を受け取ることを示すことができる。
<?php function sum(...$numbers) { $total = 0; foreach ($numbers as $num) { $total += $num; } return $total; } echo sum(1, 2, 3, 4, 5, 6, 7, 8, 9);
出力結果は45
となる。
タイプヒンティング
渡ってきたパラメータが特定のクラス(あるいは特定のクラスを継承したクラス)のインスタンスであるか?コールバック関数であるか?…というバリデーション的なことが可能。
この部分の説明に関しては、とても分かりやすく解説された記事があるため、こちらを紹介します。
参考
- 作者: Kevin Tatroe,Peter MacIntyre,Rasmus Lerdorf,高木正弘
- 出版社/メーカー: オライリージャパン
- 発売日: 2014/03/25
- メディア: 大型本
- この商品を含むブログ (8件) を見る