第6章 ファイル分割
6.1 ファイル分割について
機能を追加していくとプログラムはどんどん大規模になっていきます。その際複数のプログラマーで作業を分担するのが当然になります。このとき、これまでのように複数のクラスを同じファイルに記述しているととても不便になります。そこでこの章では最初に複数のクラスで構成されているPHPファイルを、1つのクラス単位でファイル分割する方法について学習します。
6.1.1 これまでのクラス記述とファイル分割したクラスの違い
これまでは学習してきた内容は1つのPHPファイル内にクラス定義と呼び出し元を記述していましたが、そのような書き方は行わず「1つのPHPファイルにつき1つのクラスを記述」する方法でファイル分割を行います。
その違いを以下の図に簡単に示します。
図 6.1.1:ファイル分割
図のようにファイルを分割すれば、1つのクラスの規模が大きくなっても複数のクラスが混在しているファイルより管理や修正が容易になります。これにより大規模になってくるプログラムを複数のプログラマーで分担していくこともできるようになります。多くのクラスを扱う大規模なプログラムを作成する場合には、ファイルを分割することが不可欠になります。
ポイント・基本的には複数のクラスを1つのPHPファイルにまとめて記述するのではなく、クラス毎に分割して記述することが望ましい。
ではファイル分割したプログラムを次項より紹介していきます。
6.1.2 ファイル分割したプログラム
1つのPHPファイルに複数定義したクラスを分割しても、そのクラスにアクセスできることを確認します。
ソースコード
ソース・フォルダー :myproj_framework_basic/ch06
ファイル名 :computer1.php
ファイル名 :twoPhpFile.php
アクセスURL :http://localhost/myproj_framework_basic/ch06/twoPhpFile.php
上記で示したソースコードの左側はこれまでの学習でよく目にしてきた形の、ファイル分割を行わないクラスの記述方法です。そしてその右側で示している2つのソースコードが、左側のtwoPhpFile.phpに記述された2つのクラスを、各々のクラス名のファイルとして分割したソースコード「computer1.php」と「twoPhpFile.php」になります。
実行結果
呼び出し元が書かれているtwoPhpFile.phpを実行します。
解説
ファイルが分割されてもtwoPhpFile.phpファイルからcomputer1クラスへアクセスできます。実行結果から分かるように問題なくオブジェクト生成され、show()メソッドが呼び出せています。
ファイル分割をしてもtwoPhpFile.phpファイルからComputer1クラスへアクセスできるのは、Computer1クラスが定義されているcomputer1.phpファイルを3行目でincludeを使って読み込んでいるからです。同じソース・フォルダー内のファイルだとしても、この読み込み処理の記述を省略することはできません。
この「include(インクルード)」および「require(リクワイア)」についてはPHP基礎テキストの「7.2 別のファイルを取り込む方法」で紹介しました。その時はHTMLや関数をファイルに分割していましたが、同様にクラスを記述したファイルについてもincludeとrequireを使って読み込むことができます。読み込んだ結果として、クラスへのアクセスが可能になり、これまでのようにオブジェクト生成が行えます。
ファイル分割イメージ
図 6.1.2: ファイル分割クラスのアクセス
複数ファイルの読み込み
includeやrequireを使って複数のファイルを読み込むと、読み込みの順序によっては同じファイルが複数回読み込まれ、定数や関数の定義が意図しないものとなってしまう可能性があります。
このとき、一度だけ読み込んで欲しいファイル(定義などを記述したファイル等)については、include_onceやrequire_onceを使って読み込むと、複数回読み込まれる現象を回避することができます。用途や内容に応じて、使い分けるようにしましょう。
(細かな使い分けや仕組みについては、PHP基礎テキストの「7.2 別のファイルを取り込む方法」を参照してください。)