【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が読み込まれた。