PHPの「関数」で処理を共通化して再利用する――プログラミングの幅をぐっと広げようWeb業界で働くためのPHP入門(9)(3/3 ページ)

» 2017年08月07日 05時00分 公開
前のページへ 1|2|3       

別のファイルに関数を記述する

 最後に、関数の再利用についてもう少し見ていきましょう。

 例えば、リスト3で定義したmultiplyArray()ですが、この関数はuseUserDefinedFunction.phpに記述されており、このファイル内でしか使えません。せっかく、処理を再利用するために関数を定義しても、他から利用できないのはもったいないことです。

 そこで、再利用できるようにこれら関数を1つのファイルにまとめ、関数を使うphpファイルでは関数が書かれたファイルを読み込む方法を採ります。実際にコーディングしてみましょう。

関数をまとめたファイル

 まず、関数をまとめたfunctions.phpファイルを作成しましょう。

  1. <?php
  2. function multiplyArray(array $array): float
  3. {
  4. $num = 1;
  5. foreach($array as $value) {
  6. $num *= $value;
  7. }
  8. return $num;
  9. }
  10. function multiplyArray2(array $array)
  11. {
  12. $num = 1;
  13. foreach($array as $value) {
  14. $num *= $value;
  15. }
  16. print("配列の計算結果: ".$num);
  17. }
リスト5 phplesson/chap09/functions.php

 リスト3記載のmultiplyArray()とリスト4記載のmultiplyArray2()を丸々コピーしただけのファイルです。このように、関数名さえ重ならなければ、1つのファイルに幾つでも関数を記述できます。なお、このファイルは関数を定義しただけのファイルなので、ブラウザから実行しても何も起こりません。

関数をまとめたファイルを読み込むrequire_onceメソッド

 次に、このファイルを読み込んで実行するphpファイルを作成しましょう。

  1. <?php
  2. require_once("functions.php"); // (1)
  3. $list1 = [5, 4, 8, 6, 2, 9];
  4. $result = multiplyArray($list1);
  5. print("配列の計算結果: ".$result."<br>");
  6. $list2 = [7, 5, 9, 1, 3, 6];
  7. multiplyArray2($list2);
リスト6 phplesson/chap09/useFunctions.php

 実行結果は下記の通りです。

配列の計算結果: 17280
配列の計算結果: 5670

 4行目以降はリスト3や4とほぼ同じです。ただし、それぞれ別の配列にするために、変数名を変更しているのと、2個目の配列($list2)の中身を1個目とは別にしています。

 ここで新しい記述は(1)です。このrequire_once()という処理で別ファイルに記述したfunctions.phpを読み込んでいます。試しにこの1行をコメントアウトしてuseFunctions.phpを実行すると、以下のように表示されます。

Fatal error: Uncaught Error: Call to undefined function multiplyArray() in C:\xampp\htdocs\phplesson\chap09\useFunctions.php:5 Stack trace: #0 {main} thrown in C:\xampp\htdocs\phplesson\chap09\useFunctions.php on line 5

 内容は「定義されていない関数であるmultiplyArray()を呼び出しています」となっています。つまり、外部ファイルに記述されたmultiplyArray()を認識していないのです。これを認識するためには、やはり(1)の記述が必要なのです。

 今後、関数など外部ファイルに定義を記述し、それを読み込んで使う場面が増えてきます。その際は、require_once()の()内にそのファイルのパスを記述すると思ってください。

 なお、今回はfunctions.phpがuseFunctions.phpと同じフォルダ内にあるので、ファイル名だけ記述していますが、functions.phpが別フォルダ、例えば、「chap09」配下の「funcs」フォルダ内にあるとするなら、下記のように記述します。

require_once("funcs/functions.php");

コラム「requireとincludeとonce」

 外部phpファイルを読み込む処理として、ここではrequire_once()を使いましたが、require_once()の他に、require()、include()、include_once()の合計4個あります。

 これらの違いは、下記の2点です。

  • 読み込む対象ファイルが存在しない場合にエラーを返すかどうか
  • そのファイルの読み込み済みチェックを行うかどうか

 読み込み済みチェックとは、その読み込み対象のファイルが、それ以前にrequire()やinclude()されたかどうかをチェックすることです。onceがない方のrequire()やinclude()では、この処理を記述するたびにファイルの読み込み処理が行われます。

 本稿のサンプルでは、関数定義のファイルのみなので、一度だけ読み込まれても何度も読み込まれてもあまり違いは分かりませんが、読み込み先ファイルに例えばprint()などの表示処理が含まれていた場合、onceが付いていない方のrequire()やinclude()では、そのたびごとに表示処理が行われてしまいます。

 表にすると下記の通りです。

表2 外部ファイル読み込み処理の違い
命令 エラー チェック
require() ×
require_once()
include() × ×
include_once() ×

 この表からrequire_once()を使うといいということが分かるでしょう。

次回は変数の有効範囲について

 関数について、特に引数や戻り値についてはもう少し掘り下げたいところですが、いったん横に置いておいて、次回は変数の有効範囲について解説します。

今回のサンプルコード

 今回のサンプルコードはこちらからダウンロードできます。

鬯ッ�ッ�ス�ッ�ス�ス�ス�ゥ鬮ォ�ー�ス�ウ�ス�ス�ス�セ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�オ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�コ鬯ッ�ッ�ス�ッ�ス�ス�ス�ョ�ス�ス�ス�ス�ス�ス�ス�ヲ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ョ鬯ッ�ョ�ス�ッ�ス�ス�ス�キ�ス�ス�ス�ス�ス�ス�ス�サ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�サ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ソ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス鬯ッ�ッ�ス�ッ�ス�ス�ス�ッ�ス�ス�ス�ス�ス�ス�ス�ッ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ィ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�セ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�」鬯ッ�ッ�ス�ッ�ス�ス�ス�ッ�ス�ス�ス�ス�ス�ス�ス�ョ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�エ鬯ッ�ョ�ス�」鬮ョ蜈キ�ス�サ�ス�ス�ス�ソ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�・�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ウ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ィ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス鬯ッ�ョ�ス�ッ髫イ蟷「�ス�カ�ス�ス�ス�ス�ス�ス�ス�」�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�、�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ク�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�イ鬯ッ�ッ�ス�ッ�ス�ス�ス�ゥ鬮ッ貊ゑスソ�ス霑ケ�ウ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ソ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス鬩搾スオ�ス�コ�ス�ス�ス�、�ス�ス邵コ�、�つ€�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�」鬯ッ�ッ�ス�ッ�ス�ス�ス�ッ�ス�ス�ス�ス�ス�ス�ス�ョ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�エ鬯ッ�ッ�ス�ッ�ス�ス�ス�ゥ鬮ッ譎「�ス�カ髯橸ス「�ス�ス髫エ�ッ�ス�カ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ュ鬯ッ�ッ�ス�ョ�ス�ス�ス�ョ�ス�ス�ス�ス�ス�ス�ス�」�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ソ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ィ鬯ッ�ッ�ス�ョ�ス�ス�ス�ッ鬮ッ蜈キ�ス�ケ�ス�ス�ス�コ�ス�ス�ス�ス�ス�ス�ス�サ鬩幢ス「�ス�ァ髫ー�ス竏橸ソス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ソ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�コ鬯ッ�ッ�ス�ョ�ス�ス�ス�」鬮ッ蜈キ�ス�ケ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�オ鬯ッ�ョ�ス�ォ�ス�ス�ス�エ鬮ォ�ー�ス�ォ�ス�ス�ス�セ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�エ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス鬯ョ�ォ�ス�カ鬯ョ�ョ�ス�」�ス�ス�ス�ス�ス�ス�ス�」�ス�ス�ス�ス髯橸スウ髣鯉スィ�ス�ス�ス�「髫ー�ス竏橸ソス�ス�ス�ス�ス�ス�ス�ュ鬯ョ�ョ隲幢スカ�ス�ス�ス�」�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�「�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ゥ鬯ッ�ッ�ス�ッ�ス�ス�ス�ゥ鬮ッ譎「�ス�キ�ス�ス�ス�「�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�「鬯ッ�ョ�ス�ォ�ス�ス�ス�エ鬯ョ�ョ隲幢スカ�ス�ス�ス�」�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�「�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�シ鬯ッ�ッ�ス�ッ�ス�ス�ス�ゥ鬮ッ譎「�ス�キ�ス�ス�ス�「�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�「鬯ッ�ョ�ス�ォ�ス�ス�ス�エ鬮」蛹�スス�ウ�ス�ス�ス�サ�ス�ス�ス�ス�ス�ス�ス�ス鬯ョ�ォ�ス�カ髫ー謦ー�ス�コ�ス�ス�ス�サ驛「�ァ隰�∞�ス�ス�ス�ス�ス�ス�ス�ソ�ス�ス�ス�ス�ス�ス�ス�ス鬯ゥ謳セ�ス�オ�ス�ス�ス�コ�ス�ス�ス�ス�ス�ス�ス�、�ス�ス�ス�ス驍オ�コ�ス�、�ス縺、ツ€鬯ッ�ッ�ス�ッ�ス�ス�ス�ッ�ス�ス�ス�ス�ス�ス�ス�ョ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ヲ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ェ鬯ッ�ッ�ス�ゥ髯具スケ�ス�ス�ス�ス�ス�ス�ス�ス�ス�カ鬯ョ�」髮具スサ�ス�ス�ス�ィ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ヲ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�エ�ス�ス�ス�ス�ス�ス�ス�ス鬩搾スオ�ス�コ�ス�ス�ス�、�ス�ス邵コ�、�つ€鬯ッ�ョ�ス�ッ�ス�ス�ス�キ鬯ョ�」鬲�シ夲スス�ス�ス�ィ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�キ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�サ鬯ッ�ッ�ス�ッ�ス�ス�ス�ッ�ス�ス�ス�ス�ス�ス�ス�ッ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ェ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ュ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�イ鬯ッ�ッ�ス�ッ�ス�ス�ス�ゥ鬮ォ�ー�ス�ウ�ス�ス�ス�セ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�オ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�コ鬯ッ�ッ�ス�ョ�ス�ス�ス�ッ�ス�ス�ス�ス�ス�ス�ス�キ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�キ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�カ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス New
前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

HTML5�ス�ス�ス�ス�ス�ス�ス�ス鬮ッ蜿・�ケ�「�ス�ス�ス�スX 鬯ッ�ョ�ス�ォ�ス�ス�ス�ェ鬮ッ蛹コ�サ繧托スス�ソ�ス�ス�ス�ス�ス�ス�ス�ス�ス�コ鬮」蛹�スス�オ髫エ竏オ�コ�キ�ス�ク�ス�キ�ス�ス�ス�ケ髫エ雜」�ス�「�ス�ス�ス�ス�ス�ス�ス�ウ鬯ゥ蟷「�ス�「�ス�ス�ス�ァ�ス�ス�ス�ス�ス�ス�ス�ュ鬯ゥ蟷「�ス�「髫エ雜」�ス�「�ス�ス�ス�ス�ス�ス�ス�ウ鬯ゥ蟷「�ス�「�ス�ス�ス�ァ�ス�ス�ス�ス�ス�ス�ス�ー

鬯ョ�ォ�ス�エ髯晢スキ�ス�「�ス�ス�ス�ス�ス�ス�ス�ャ鬯ョ�ォ�ス�エ鬯イ�ス�シ螟イ�ス�ス�ス�ス�ス�ス�ス�・鬯ョ�ォ�ス�エ髯晢スカ�ス�キ�ス�ス�ス�」�ス�ス�ス�ッ鬮」蜴�スス�ォ�ス�ス�ス�」

注目のテーマ

4AI by @IT - AIを作り、動かし、守り、生かす
Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。