【PHP入門】引数の基礎を完全攻略する!関数を呼び出す方法5選muramatsu2017/5/232019/5/22こんにちは!ライターのmuramatsuです。今回はPHPの引数についてです。引数を指定して関数を呼び出す引数のデフォルト値を設定する複数の引数を指定する引数に配列を指定するという引数の基本的な使い方、コマンドライン引数の使い方の応用的な使い方に関して解説していきます。引数は、一度書いた処理の動きを変えて何度も使うことができ、とても便利ですよ。まとめ引数とは関数を処理するときに渡す値のことを引数といいます。ある情報(値)を引数が持っており、それを関数に渡すことで、関数はその情報に応じた処理をしてくれるようになります。引数はパラメーターとも呼ばれ、関数内で処理をしてもらって返ってくる結果の値を戻り値や返り値と呼びます。引数は関数のカッコ()内に直接数字や文字列を書いたり、その変数を書きます。ここでは「関数」というワードが何回か出来てきましたが、引数と関数はいったいどういった関係なのでしょうか。関数と引数の関係まず関数について学び、関数と引数がどのような関係なのかを見ていきましょう。関数とは処理をひとまとめにして定義したものを関数といいます。「命令する機能」の様なものです。機能なので、それを動かすには呼び出してあげないと使うことはできません。定義した関数は何度でも呼び出すことができ、同じコードを書くことを避けられます。呼び出しは関数名と引数をコードに記述することで指定した関数を呼び出し、引数が持っている情報を渡して、関数内で処理をしています。命令をする機能の関数は、PHPでは既に定義されている内部関数(ビルトイン関数・組み込み関数)とユーザーが定義するユーザー定義関数があります。ユーザーが関数を定義するには、functionを使って定義していきます。//省略可能}関数はfunctionの後にユーザーが定義した関数名を指定します。関数名のカッコ()内の$変数が、引数になります。returnは戻り値を返す処理を行ってくれますが、省略する事もできます。関数を定義した次は、その関数の呼び出しをしないと処理が行われません。関数は呼び出し先、呼び出しは呼び出し元と呼ばれ、呼び出し先(関数)の処理が終わると呼び出し元に処理結果が戻ってきます。処理を実行するための関数の呼び出しは以下のようになります。ようにカッコ()内に引数を書かず、省略することもできます。省略した場合の関数の呼び出しは関数名();となります。関数定義後の流れは、1.関数を呼び出す2.関数内(呼び出し先)で処理が行われる3.呼び出し元に処理が戻るというように処理が実行されていきます。関数名を使用しないfunctionのみの関数である無名関数(クロシージャ)を記述することもできますので、頭の片隅にでも入れておきましょう。実際に、自分で定義した関数を実際に呼び出して処理をしてみましょう。以下にfunctionを指定して引数のないユーザー定義関数を使用する簡単なサンプルを記述します。executed.サンプルでは関数名をfooとし、その処理echoを記述しました。'fooの呼出し<br>';による出力を実行し、その後foo()で関数を呼び出しています。関数は、引数がなくても定義することができ、呼び出して処理をすることが可能なことが分かりました。どのような時に引数が必要なのでしょうか。関数ではある処理をまとめている黒いボックスとよくイメージされます。引数はその黒いボックスの中に入れる値で、その後箱から出てきた処理結果が戻り値というイメージです。引数は関数が柔軟な処理を行う方法として必要な情報になっているのです。関数は何度も繰り返し使うことができ、同じコードを何度も書かなくてもいいと解説しました。関数を呼び出して実行するだけでは、処理結果は毎回同じとなってしまいますね。そこで関数に異なる引数(値)を渡すことにより、同じ結果ではなく違う実行結果を得ることができるようになり、更に便利に使えるようになります。引数はfunctionで定義した関数本体で$変数として定義されるので、その値は変動的です。呼び出しの際に引数を指定しない場合は、関数本体に定義されている値が渡されますが、呼び出し時に引数を指定した場合は、その引数の値が関数に渡されます。この関数本体が持っている引数のことを仮引数といい、関数を呼び出す際に指定している引数を実引数と呼びます。関数本体に仮引数を設定し、呼び出し時に実引数を指定するとどのようにして処理されるのか、実際に次で見ていきましょう。引数を指定して値を関数に渡すここでは引数の値がどのように渡されているのかを実際に見ていきます。仮引数と実引数がどのように変化するのか、値渡しと参照渡しの場合の2つの方法を紹介します。実引数を関数に渡す、値渡し値渡しとは、呼び出し元が実引数に格納されている値を関数に渡していることです。値渡しの場合、関数本体の引数(値)と呼び出し元になる引数(値)は異なる値となっています。そのため、呼び出しの際に違う値を渡したとしても、関数本体の値が変わることはありません。以下に関数に実引数を渡す簡単なサンプルを紹介します。//functionでfruitsの関数を定義。'これは'.$value.'です。?>実行結果:これはappleです。これはorangeです。functionで関数fruitsを定義し、仮引数に$valueを設定しました。関数の処理として、echoで引数の値$valueを出力させます。関数の呼び出しで、1つは呼び出しの実引数に値を直接指定し、もう1つは変数$fruits1に値を代入し実引数にその変数を指定しました。呼び出し時のカッコ()内に実引数を書くときは、直接書いても、値を代入した$変数を書いても問題ありません。実行結果のとおり、渡された引数によって、fruits関数の中で出力結果が異なることが分かりますね。関数内で実引数の値を変える参照渡し値渡しでは、実引数の値そのものが関数内の仮引数にコピーして渡されているため、呼び出し先で処理されても、呼び出し元の実引数の値が変わることはありませんでした。参照渡しの場合は、実引数と仮引数は値が入っている場所を見ています。呼び出し元の値ではなく、値が入っている場所が渡されるため、関数内で定義されている変数(仮引数)は呼び出し元の変数(実引数)と同じになります。実引数で渡された値を関数内で処理しその結果を返すと、処理されて返ってきた値に変わり、呼び出し元の実引数の値も変更されます。実引数と仮引数の値は同じ参照渡しのコードの書き方は、仮引数にアンド(&)をつけるだけで、あとは値渡しとほぼ変わりません。//省略化}では実際にサンプルコードで、値渡しと参照渡しを比べてどのように引数の値が変わるのか、見てみましょう。$ex;?>実行結果:63366値渡しでは、関数を呼び出した際に実引数の値が仮引数に渡され関数内の処理が行われています。その後の処理で再度実引数の値を確認しても、変数の値$exは3のままになっています。参照渡しでは、関数を呼び出す前の変数$exは代入された値のままになっていますが、関数を呼び出した後は値が変更されているので、値が6と変わっていますね。PHPでは実際のプロジェクトではあまり参照渡しはしないので、こう言う方法があるくらいに覚えて起きましょう。引数のデフォルト値を設定する引数を使用するように定義した関数でも、引数を省略して実行することができます。引数が渡されなかった場合のデフォルト値(初期値)を設定することもできます。実行処理}以下に引数のデフォルト値を設定して、関数の処理を実行する方法を記述します。'これは'.$value.'です。?>実行結果:これはorangeです。これはbananaです。サンプルでは、fruits関数の引数$valueのデフォルト値を’orange’に設定してあります。最初のfruits関数の呼び出しでは引数を指定していないので、引数$valueのデフォルト値’orange’が使用されています。次の呼び出しではnullを渡していますので、引数$valueはnullとなり何も表示されていません。最後の呼び出しでは’banana’を渡していますので、引数$valueは’banana’となり表示されています。デフォルト値のある引数はデフォルト値がない引数より後に記述しなければいけません。複数の引数を指定する関数には引数を複数指定することも可能です。引数を複数指定する場合は、カンマ(,)を用いて引数を書いていきます。実行処理}例えば関数の中で配列に含まれている特定の値を調べたい場合、引数に検索する対象の値と配列を指定して処理を実行することもできます。以下に引数を複数指定して、関数の処理を実行する方法を記述します。