【PHP】requireでファイル読込【include、onceとの違い】

PHPの勉強を始めた時に一番最初に理解したrequireについて見てみます。


requireとは?

requireは外部ファイルを呼び込む事が出来るものです。

<?php require 'requireで呼び出すファイルパス' ?>

これで読み込む事が出来ます。繰り返しの部分などに役立ちます。


外部ファイル化しておくメリット

外部ファイル化するメリットを図解してみます。

Webページをパーツ別に分けると

サイトタイトル(<h1>)やグローバルナビ、フッター部分はわりかし各ページ共通になりやすいので何回も同じ部分に関しては外部ファイル化することで何度も書くのではなくファイルを呼び出すだけでOKになります。


最適に書くには?

どこまで共通部分になるかといった設計や、絶対パスについて理解が必要です。

パターンA

パターンAではheader.phpにはDOCTYPE宣言と<head>タグ・<link>タグなどのみ、footer.phpには</body>と<html>でページを終了させるタグのみになってます。

パターンB

パターンBではheader.phpにDOCTYPE宣言と<head>タグだけでなくグローバルナビまで、footer.phpにもサイトマップなどのリンク一覧などを入れています。

勘のいい方ならわかるかと思いますが、index.phpになる部分がページごとに変わる部分なのでその部分だけ新しく作りながらheader.phpとfooter.phpを呼び出せば下層ページなどが作りやすくなります。

リンクに関しては絶対パスで指定しておけば階層によるズレが生じなくなりますので絶対パスにしておきましょう。


includeとは?

requireと似たものとしてincludeというもの、他にもrequire_onceやinclude_onceといったものもあります。

include "パス";
require "パス";
include("パス");
require("パス");
//基本的には全部同じ挙動です

基本的な挙動は同じです。requireとincludeの違いはエラーの時の挙動です。

require
エラー時には処理を終了する(エラー表示に出てくるFetalエラーとは致命的エラーで処理をすべて中止)
include
エラー時にはエラー部分を飛ばして処理を継続(エラー表示に出てくるWarningは警告であり処理が出来ていない部分だけ中止)

require_onceとinclude_onceは同一ファイルの読み込みを防ぎ1回のみ読み込みをするものです。

[sample.php]

$x = 1;
$y = 2;

[index.php]

require_once 'sample.php';
echo $x.'<br>';
echo $y.'<br>';

$x = 3;
$y = 4;

require_once 'sample.php';

echo $x.'<br>';
echo $y.'<br>';

[結果]

1
2
3
4

sample.phpで変数xと変数yに関して1と2を代入したのち、index.php側でsample.phpを呼び出して変数xと変数yを表示します。

画面表示したのち、index.php内で変数xと変数yに3と4を再代入した後に、もう一度sample.phpを呼び出そうとしていますが、1回しか呼び出されないので変数xと変数yには3と4が入ったままの状態になり再度echoで画面表示した値が3と4になるという流れです。


外部ファイル化しとけばOK?

外部ファイル化するにしても問題もあります。

  • <title>タグの内容
  • 読み込むCSSファイル名

CSSファイルは1つのCSSにすべて書くという方法や読み込ませたいCSSファイルを全部読み込ませるという手もありますが管理しづらくなったり読み込みが遅くなってしまいます。

できることなら共通CSSファイル+呼び出し元のファイル名.cssの2つにしたいです。

<title>タグに関しては、呼び出し元のh2タグにidなどでページタイトルをfile_get_contentsなどを使って取得してtitleタグに入れる手法などが考えられます。

file_get_contentsの説明をしだすとまた長くなってしまうので別の機会にまとめてみます。


まとめ

PHPで出来ることが多すぎる一方、JSと比べてエラー表示が違うので最初のうちは戸惑いますが慣れてくると出来ることが増えるのですこしずつ勉強していきます。