第7章 関数を作って使おう

7.2 別のファイルを取り込む方法(includeとrequire)

プログラムの規模が大きくなると、とても1枚のファイルでは管理が行えなくなります。そんなような時は、プログラムを機能単位に別々のファイルに分けます。ファイルを分けることで、管理や修正が簡単に行えるメリットがあります。また、関数も別ファイルとして記述しておくことで、別のプログラムでも利用することができます。


図 7.2.1:大規模な処理はファイルを分割する

別のファイルに分けてしまうと、当然そのままでは利用することはできません。そこで、PHPの組み込み関数である「include(インクルード)」または「require(リクワイア)」を使うことで、別ファイルの取り込みが行えるようになり、そのファイルに記述した機能を利用することができます。
次項よりファイル取り込みを行う、組み込み関数の仕組みと使い方を学習して行きます。

7.2.1 別のファイルの処理を取り込んで利用する方法

前述しましたが、別のファイルを取り込む方法は「include(インクルード)」または「require(リクワイア)」を利用します。また、この2つの関数にも違う動作をする2種類があります。

書式:ファイルの取り込み

取り込むファイル名はパス指定を行うことで、違うフォルダ内のファイルでも取り込みができます。また取り込めるファイルに上限はないため、いくつのファイルでも自由に取り込むことができます。

凡例:ファイルの取り込み

相対パスで指定する場合は、実行ファイルが基点になります。

ファイルを取り込むと、取り込んだファイルの記述内容を含んだようなイメージになります。そして取り込んだ時点で、そのファイルの記述内容が処理されることになります。


図 7.2.2:ファイルの取り込みイメージ

また、ファイルの取り込みが行える関数には、4種類ありましたが以下の表7.2.1に示す違いがあります。

表 7.2.1: ファイル取り込み関数の違いについて

4種類ありますが、基本どれを使っても構いません。ただ安全性を考慮するならrequire_onceを使うことをお薦め致します。その理由としてはincludeを使って指定したファイルがなくて動作を進めたとしても、結局は必要な処理が足りずにプログラムが動かなくなることになります。また既に取り込み済みのファイルを重複して取り込むと、記述している内容によっては動作がおかしくなります。そういう場合を考慮してrequire_onceを使えばより安全になるからです。

ポイント
  • 大規模なプログラムの場合、別々のファイルに分けることができる
  • 組み込み関数のincludeもしくはrequire利用すると、ファイルを取り込むことができる。

では、別のファイルに記述した処理を取り込むプログラムを確認して行きましょう。

別のファイルを取り込んで動作するプログラム

別のファイルに記述したhtmlのヘッダー情報を取り込んで、正しくプログラムが動作することを確認してみましょう。

ソース・フォルダー: myproj_basic/ch07
パッケージ: header.php
アクセスURL:useRequire.php

header.php

ソース・フォルダー: myproj_basic/ch07
パッケージ: useRequire.php
アクセスURL:http://localhost/myproj_basic/ch07/useRequire.php

useRequire.php

実行結果

解説

今回のプログラムは、html文章の<head>部分を記述した「header.php」を「useRequire.php」に取り込んで正しく動作するのか確認しています。

まずは、取り込み元になる「header.php」について簡単に説明を行います。
1~4行目は、これまで使用してきた<head>タグとその中に設定してる<meta>タグと<title>タグを設定しています。プログラムの先頭には全て「タブ(字下げ)」が入っています。このタブは取り込み先のHTML文章と揃えるためのタブになります。
3行目で<title>タグ囲みの中にショートタグを使って「変数$title」を埋め込んでいます。これは、取り込み先のこのファイルを取り込んだ位置よりも上に、変数$titleの宣言があればその変数の値が利用できます。
5行目の「空行」は取り込み先の、次のHTML文章が4行目の</head>の後にくっついて表示されないための処置になっています。

続いて、取り込み先になる「useRequire.php」の処理について説明を行います。
1~3行目で変数$titleに「別ファイルの取り込み!」という文字列を代入しています。

続いて5行目でrequire_once関数を使って「header.php」ファイルの取り込みを行っています。

以下の図のようにHTML文章を表示してみると、別ファイルに記述している内容が正しく取り込まれているのが確認できます。さらに「header.php」の取り込みを行わない場合も確認してみましょう。


図 7.2.3:header.phpの取り込み有無の違いの結果確認

今回のプログラムのように色々な場面で使われるような処理を別ファイルにしておくと、他のプログラムでも利用でき大変便利になります。

7.2.2 別ファイルに定義した関数を取り込んで利用する方法

関数を別のファイルに定義しておき、そのファイルを取り込むことで自由に関数を利用することができます。ファイルの取り込み方は前項で学習した、includeもしくはrequireを利用すれば行えます。
但し、1つだけ注意しなければならない点があります。同一ファイル内に記述した関数の場合は、関数を定義する位置は呼び出し部分よりも上下どちらでも問題ありません。しかし、別ファイルに定義した関数を呼び出す場合は、関数の呼び出しはファイルの取り込みの記述よりも必ず下にしなければなりません。

凡例:関数定義ファイルの取り込みと関数の呼び出しの順番

別ファイルに定義した関数を利用する場合は、「ファイルの取り込み→関数の呼び出し」の順番を必ず守る必要があります。

実際に、別ファイル内に定義した関数を利用するプログラムを確認してみましょう。

別ファイルに定義した関数を動作させるプログラム

別ファイルに定義した関数を取り込んで、正しくプログラムが動作することを確認してみましょう。

ソース・フォルダー: myproj_basic/ch07
パッケージ: calcForm3.php
アクセスURL:http://localhost/myproj_basic/ch07/calcForm3.php

calcForm3.php

ソース・フォルダー: myproj_basic/ch07
パッケージ: function.php
アクセスURL:useFunction3.php

function.phpはcalc関数が定義されいるだけのファイルです。

function.php

ソース・フォルダー: myproj_basic/ch07
パッケージ: useFunction3.php
アクセスURL:calcForm3からの画面遷移でアクセスされる

useFunction3.php

解説

今回のプログラムは、別ファイルfunction.phpに定義しているcalc関数を、useFunction3.phpで利用することが一番のポイントになります。また処理内容に関しては7.1.3項で作成した内容に、「掛け算、割り算、剰余」を追加したプログラムになっています。

まずは入力画面calcForm3.phpの変更点について説明を行います。
7.1.3項で作成したcalcForm2.phpから12~14行の3つの<option>タグが追加されています。これにより計算方法で「*」、「/」、「%」が選択できるようになります。

続いて関数を定義しているfunction.phpについて説明を行います。
ソースコードからも確認できますが、calc関数の定義のみを行っているファイルになっています。また7.1.3項で使用していたcalc関数の処理に条件分岐文を追加し「*」、「/」、「%」を使った計算が行えるようになっています。

最後に、calcForm3.phpからの入力データを受け取って処理を行うuseFunction3.phpの説明を行います。また、このファイル内には関数定義は1つも行っていないことを覚えておいてください。
3行目でfunction.phpファイルの取り込みを行っています。今回のようにメインの処理に影響がない関数のみの定義ファイルの取り込みは、先頭行で読み込んでおくのが一般的になります。また、関数呼び出しよりも上にしておくルールも守れます。

6~8行目では画面からの入力データを各変数へ代入しています。

11行目でfunction.phpファイルに定義しているcalc関数を呼び出しています。引数の情報は入力数値2つに計算方法の情報を渡して呼び出しています。計算結果は関数呼び出しの記述と置き換わり、変数$resultに代入されます。

19行目で今回の入力情報と一緒に、計算結果を画面に表示しています。

実行結果が正しく動作していることからも確認できますが、別ファイルを取り込んでそこに定義されている関数を取り込み先で利用できることが分かります。

そのファイル内でしか利用しない関数なら、そのファイル内で定義しても全然構いません。複数のプログラムで利用するなら、別ファイルに分けて再利用できるようにしておきましょう。

NEXT>> 7.3 本章のまとめ