Help us understand the problem. What is going on with this article?

PHPで外部ファイルを読み込む

More than 3 years have passed since last update.

はじめに

外部ファイルを読み込み方も、色々あるようなのでまとめていこうと思います。

実装方法

外部ファイルを読み込むには以下の方法があります。

  • require
  • require_once
  • include
  • include_once
  • autoload

require

index.php
<?php
require('test.php');
//require 'test.php';でもいいみたい

echo $name;//佐藤
?>
<?php
$name = '佐藤';
?>

include

index.php
<?php
include('test.php');
//include 'test.php';でもいいみたい

echo $name;//佐藤
?>
<?php
$name = '佐藤';
?>

requireとincludeの違い

requireとincludeの違いは、外部ファイル読み込み時のエラーの振る舞いです。

require

エラー時は、Fatal Errorとなり、処理が止まります。

include

エラー時は、Warningを出力し処理は実行されます。

requireとrequire_onceの違い

requireと、require_onceは同じように機能します。
違う点は、require_onceは、指定したファイルが読み込まれている場合、同じ処理を実行しても再度読み込まれることはありません。

autoload

私はPHPを業務で書いたことがないので、わからないのですが、
外部クラスを読みこんで使う場合に、読み込むファイルが多くなってくると、読み込む処理を書くだけでも大変になる場合があるみたいです。

そこで、クラスのオートインクルードを使います。
(JSでもライブラリの読み込みは、面倒なのでgulpで自動化したりするイメージでしょうか。)

__autoload

__autoloadメソッドは、インスタンス生成時に対象となるクラスが、読み込めない場合に呼び出されます。
引数には、 読み込めなかったクラス名 が渡ります。

index.php
<?php

$user = new User();
echo $user -> name;//佐藤

function __autoload($className){
  //$className(インスタンス生成時に読み込まれていないクラス名)
  $file = './' . $className . '.php';
  require $file;
}
?>
User.php
<?php
class User {
  public $name = '佐藤';
}
?>

__autoloadは、1つしか定義できない為、ファイル名とクラス名が一定のルールをもっていないと成立しません。

  • 1つのクラスにつき、1つのクラスファイルを作成する
  • クラス名とファイル名は同じにする、など・・・

spl_autoload_register

インスタンス生成時に対象となるクラスが読み込めない場合、指定した関数を__autoloadの実装として登録できます。

__autoloadの実装部分を関数として登録できるってことだと思います。

spl_autoload_registerは、複数定義できるので__autoloadより柔軟です。
__autoloadよりもspl_autoload_registerを使うことを推奨されているようです。

<?php

function autoload($className){
  require './'.$className.'.php';
}

spl_autoload_register('autoload');

$user = new User();
echo $user -> name;//佐藤

?>
User.php
<?php
class User {
  public $name = '佐藤';
}
?>

終わり

spl_autoload_registerの理解が、まだちゃんとできていないので、
実際に使った時に、加筆修正していきたいと思います。

nogson
へっぽこデザイナーです。
https://satofaction.net/
willgroup
個と組織をポジティブに変革する「チェンジエージェントグループ」
https://willgroup.co.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away