【PHP】ファイルの分割方法とrequire、include、require_once、function_existsの使い方
PHPでファイルを分割してメンテナンスしやすくする方法を紹介します。
またrequire、include、require_once、function_existsの使い方を紹介します。
ファイルの構成
∟file1.php
∟file2.php
∟index.php
上のようなファイル構成で、
それぞれのfile1からfile3までのphpファイルの関数をindex.phpから使えるようにします。
file1.phpの記述
<?php
// 関数がすでに宣言されていない場合
if(!function_exists('func1')) {
function func1() {
echo 'func1が呼ばれた';
}
}
file2.phpの記述
<?php
file2が読み込まれた。
index.phpの記述
<?php
// 使いたいファイルを読み込む
require('file1.php');
require 'file1.php';
// 関数を実行する
func1();
//func1が呼ばれた
// file2を読み込む
require('file2.php');
//file2が読み込まれた。
まずは、使いたいファイルをrequire()を使って読み込みます。
requireは()で囲んでもキーワードとして指定してもOKです。
これはファイルを読み込んだだけのため、
そのファイルの中の使いたい関数を実行します。
phpファイルではhtmlでもいいので、読み込んだファイルにHTMLがあればそれが表示されます。
function_exists()でエラーを防ぐ
<?php
// function_exists()でエラーを防ぐ
if(!function_exists('func')) {
function func() {
// 関数の処理
}
}
require()を何度も実行したい場合、読み込んだファイルの関数がグローバルスコープに何度も宣言されてしまうことになるためエラーができます。
そこで、function_exists()を使って、宣言されていない場合のみその関数を宣言するようにします。
PHPのファイルのスコープについて
PHPはファイルごとのスコープというのは設けられていません。
そのため、require()で読み込んだ場合、index.phpのグローバルスコープに関数が配置されます。
つまり同じ名前の関数を作成しようとするとエラーが出ますので注意が必要です。
スコープについては、【PHP】グローバルスコープ、ローカルスコープ、スーパーグローバルについて を参照してみてください。
require、require_onceの使い方
require()では、実行するたびに何度でも該当のファイルを読み込むことができます。
require_once()では、何度実行しても一度だけ該当のファイルを読み込むことができます。
<?php
// requireの例
require('file2.php');
require('file2.php');
require('file2.php');
//file2が読み込まれた。
//file2が読み込まれた。
//file2が読み込まれた。
// require_onceの例
require_once('file2.php');
require_once('file2.php');
require_once('file2.php');
//file2が読み込まれた。
require、includeの違い
require()とinclude()は、ファイルが見つからなかったときに挙動の違いがでてきます。
require()の場合、もしファイルが見つからない場合は、致命的なエラーと認識され、それ以降の処理が止まります。
それに対し、include()の場合は、警告レベルのエラーと認識され、ファイルがない場合でもそれ以降の処理が実行されます。
そのため、絶対に必要なファイルを読み込む場合、require()を使い、そのファイルがないと致命的なエラーにならない場合include()を使うといった使い分けをします。
関数を記述しているファイルはないと致命的になるので、require()、htmlだけのファイルは致命的にならないものはinclude()といった感じで使い分けます。