LoginSignup
61
76

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-04-25

はじめに

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

実装方法

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

  • 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の理解が、まだちゃんとできていないので、
実際に使った時に、加筆修正していきたいと思います。

61
76
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
61
76