【PHP入門】require関数って何?ナゼ使うのかも徹底解説!

こんにちは!エンジニアのオータケです。

PHPのプログラムから外部ファイルを読み込むには、require文やinclude文を使用します。

外部ファイルは、主に共通した処理を記述したファイルをプログラム間で使用するときによく使われます。

本記事では特に、なぜrequireを使うのかも含めて解説をしていますのでぜひご覧ください。

この記事では

[基本] requireとは何か、どういう場面で使うのか
[基本] requireの基本的な使い方
[基本] require_onceやincludeとは何か
[実践] includeとの違いは何か

を解説していきます。

外部ファイルを用意しておくとプログラムやHTMLなどのテンプレートを再利用するときに非常に便利です。

ここではそんな外部ファイルを読み込むrequire文の使い方について分かりやすく解説いたします。

目次

requireとは?

requireはどんな機能?

外部ファイルを読み込むには、require文を使用します。

外部ファイルを読み込むとは、

「別ファイルに書かれた処理をを実行する」

と思っていただいても良いでしょう。

例えば、外部ファイルにPHPのプログラムの記述があれば、require文で読み込んだときにそのプログラムが実行されます。

requireの書き方

require文は以下のように記述します。

require "ファイル名";

ファイル名はシングルクォーテーションのほか、ダブルクォーテーションで囲むこともできます。

また読み込むファイルパス(ファイル名を含むファイルの場所)は絶対パスから記述できますし、現在の場所を基準とした相対パスももちろん指定できます。

ファイルの指定はPHPプログラムの実行場所と同じディレクトリに存在する場合は、相対パスを指定します。

しかし、実行するファイルのディレクトリが異なる場合は、「/home/user/tmp/test.txt」のように絶対パスを指定します。

返り値

require文を実行したときに、読み込んだファイル側でreturnで戻り値を返さなかった場合に1が返されます。

外部ファイルが存在しなかった場合は、Fatal errorが発生します。

requireはどこで使うの?

外部ファイルを読み込む機能をなぜ使う必要があるのでしょうか?

またこのrequireはなぜ存在しているのでしょうか?

例えば、あなたがWebアプリケーションを作ろうとして1つのファイルにすべての処理を書くとします。

その処理が数十行や数百行といった範囲ならばいいのですが、数千、数万行を詰め込んだ場合いくつか問題が起きます。

たとえば、数万行のコードに処理を追加しなければならない時や処理を書き換えないといけない時、「どこに処理を入れるべきか」、「どこの場所に修正を加えないといけないか」などを考え把握するのに少々面倒臭さを覚えます。

それだけでなく1ファイルにすべての処理を記入するとなると数ヶ月後、数年後に自分でメンテナンスしようとした際に可読性(プログラムの読みやすさ)が落ちるため見ただけで絶望することにもなります。

また、これはとても重要なことですが1つのファイルにすべての処理を詰め込んでしまった場合、別のWebアプリケーション開発時に機能の使い回しができないということにもなります。

これはどういうことでしょうか?

次の図を見てください。

この図はECサイトを作ろうとした場合の図です。

まず、ユーザーはindex.phpへアクセスします。

1つのファイルの場合はindex.phpだけで処理を終えることになりますが、requireを使うことで機能ごとにファイルを分けることができます。

たとえば、user.phpは会員登録や会員情報を取得するための関数(もしくはクラス)を書く場所。

item.phpは商品情報の取得や商品の購入処理を行うための関数(もしくはクラス)を書く場所。
buy.phpは商品を購入する際のフォーム画面や商品購入完了画面の表示の処理を書く場所・・・・

と、機能や処理をファイルごとにわけることができるようになります。

このような書き方をすれば処理を変更する場合でも数万行のコードの山から処理を探す必要もなくなったり、一部の機能だけ別のWebアプリケーションで再利用することも可能になります。

requireの使い方

ここでは実際にrequire文の使い方を見ていきましょう。

以下の例では、require1.php から require2.php を読み込みます。

  • require1.php
  • <?php
    echo 'require1<br>';
    require 'require2.php';
    ?>
  • require2.php
  • <?php
    echo 'require2';
    ?>
  • require1.phpの実行結果
  • require1
    require2

    このサンプルではrequire1.phpでrequire文を使用して、

    「require ‘require2.php’;」の記述でrequire2.phpを読み込んでいます。

    require2.phpでは「echo ‘require2’;」と記述しているため、require2が出力されます。

    また、以下のように外部ファイルに変数が定義してある場合は、その変数を参照することもできます。

  • require1.php
  • <?php
    $fruit1 = 'apple';
    $fruit2 = 'orange';
    ?>
  • require2.php
  • <?php
    
    echo '$fruit1:'.$fruit1.'<br>';
    echo '$fruit2:'.$fruit2.'<br>';
    
    require 'require1.php';
    
    echo '$fruit1:'.$fruit1.'<br>';
    echo '$fruit2:'.$fruit2.'<br>';
    
    ?>
  • require2.phpの実行結果
  • $fruit1:
    $fruit2:
    $fruit1:apple
    $fruit2:orange

    htmlファイルを読み込む方法

    外部ファイルはPHPのファイル以外にもテキストファイルやHTMLファイルを読み込むこともできます。

    たとえば、HTMLファイルのヘッダやメタ情報などを外部ファイルとして記述しておけば、PHPのプログラムで繰り返し利用することができます。

  • require.php
  • <?php
    require 'temp.html';
    ?>
  • temp.html
  • <!doctype html>
    <html lang="en">
    <head>
      <meta charset="utf-8">
      <title>require test</title>
    </head>
    <body>
      <h1>requireテスト</h1>
      <p>これはhtmlファイルです。</p>
    </body>
    </html>
  • require.phpの実行結果
  • require_image

    requireではファイルが存在しないとエラーが発生する?

    require文では外部ファイルが存在しなかった場合にE_COMPILE_ERRORレベルの致命的なエラー(Fatal error)が発生します。

    ブラウザにエラーを出力するにはini_set関数に‘display_errors’を指定します。

    ini_setの第二引数は(0:出力しない、1:出力する)となります。

    ini_set('display_errors', 1);
    
    require "test.php";
    
    //読み込み失敗するとこの処理まで到達しない。
    echo 'test.phpの読み込み後';
  • 実行結果
  • require_image2

    requireに似た機能

    require_once

    require_once文は、require文と同じく外部ファイルを読み込むときに使用しますが、違いとして外部ファイルがすでに読み込まれているかチェックを行います。

    そのため、同じファイルを誤って読み込んで関数の再定義や変数の再代入を防ぎたいときに、require_onceを使用します。

    書き方は基本的にrequireと同じです。

    では次の例で使い方を見てみましょう。

  • require1.php
  • <?php
    $fruit1 = 'apple';
    $fruit2 = 'orange';
    ?>
  • require2.php
  • <?php
    
    //読み込み1回目
    require_once "require1.php";
    
    echo '$fruit1:'.$fruit1.'<br>';
    echo '$fruit2:'.$fruit2.'<br>';
    
    $fruit1 = 'melon';
    
    //読み込み2回目
    require_once "require1.php";
    
    //2回目は読み込まれないので$fruit = melon
    echo '$fruit1:'.$fruit1.'<br>';
    echo '$fruit2:'.$fruit2.'<br>';
    
    ?>
  • 実行結果
  • $fruit1:apple
    $fruit2:orange
    $fruit1:melon
    $fruit2:orange

    実行結果のとおり、require_onceは同じファイルを2回読み込まないため、$fruit1は変更した値を保持したままとなります。

    そのため、誤って変数の再代入や初期化を防ぎたいときはrequire_onceを使用すると良いでしょう。

    include

    requireには他にも似たような命令があり、includeといいます。

    使い方はrequireと同じような使い方をします。

    以下の例では、include1.php から include2.php を読み込みます。

    include1.php

    <?php
    echo 'include1<br>';
    include 'include2.php';
    ?>

    include2.php

    <?php
    echo 'include2';
    ?>

    実行結果:

    include1
    include2

    include1.php を実行すると、include1.php の「include ‘include2.php’;」で、include2.php の処理が実行されているのがわかります。

    しかし、この書き方だとrequireとincludeの違いがいまいちわかりません。

    では次の項目でrequireとincludeの違いについて説明していきます!

    includeとrequireの違い

    include文はrequire文と同様に外部ファイルを読み込みます。

    決定的な違いとしては、

    • require文は外部ファイルの読み込みに失敗すると、致命的なエラー(Fatal error)が発生する。
    • include文は外部ファイルの読み込みに失敗すると、警告(Warning)が発生する。

    となります。

    致命的なエラーが発生すると、プログラムの処理は止まりますが、警告の場合はログにWarningを出力するだけで処理は継続されます。

    include文についての詳しい解説やrequire文との速度比較については、以下の記事で解説しています!

    PHPについてもっと知りたい方へ

    require文は外部で記述されたPHPのプログラムやHTMLのフォーマットを読み込むときに非常に便利であることがわかりましたね!

    「PHPについて実はいまいちわかっていない・・・」
    「もっとPHPについて詳しく知りたい!」

    と思っている方は以下の記事も参考にしてみてください!

    まとめ

    この記事ではrequire文について、

    • require文とは
    • require文の基本的な使い方
    • require文でhtmlファイルを読み込む方法
    • require文で読み込みが失敗した場合のエラーの出力方法
    • requireとincludeの違い

    などの外部ファイルを読み込む方法について解説しました。

    外部ファイルはhtmlのヘッダ情報や関数や変数を再定義したいときなどに非常に便利ですので、使い方はよく理解しておきましょう!

    もしrequire文の使い方を忘れてしまったら、この記事を思い出してくださいね!

    この記事を書いた人

    【プロフィール】
    DX認定取得事業者に選定されている株式会社SAMURAIのマーケティング・コミュニケーション部が運営。「質の高いIT教育を、すべての人に」をミッションに、IT・プログラミングを学び始めた初学者の方に向け記事を執筆。
    累計指導者数4万5,000名以上のプログラミングスクール「侍エンジニア」、累計登録者数1万8,000人以上のオンライン学習サービス「侍テラコヤ」で扱う教材開発のノウハウ、2013年の創業から運営で得た知見に基づき、記事の執筆だけでなく編集・監修も担当しています。
    【専門分野】
    IT/Web開発/AI・ロボット開発/インフラ開発/ゲーム開発/AI/Webデザイン

    目次