Edited at

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

More than 1 year has 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の理解が、まだちゃんとできていないので、

実際に使った時に、加筆修正していきたいと思います。