##はじめに
外部ファイルを読み込み方も、色々あるようなのでまとめていこうと思います。
##実装方法
外部ファイルを読み込むには以下の方法があります。
- require
- require_once
- include
- include_once
- autoload
##require
<?php
require('test.php');
//require 'test.php';でもいいみたい
echo $name;//佐藤
?>
<?php
$name = '佐藤';
?>
##include
<?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
メソッドは、インスタンス生成時に対象となるクラスが、読み込めない場合に呼び出されます。
引数には、 読み込めなかったクラス名 が渡ります。
<?php
$user = new User();
echo $user -> name;//佐藤
function __autoload($className){
//$className(インスタンス生成時に読み込まれていないクラス名)
$file = './' . $className . '.php';
require $file;
}
?>
<?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;//佐藤
?>
<?php
class User {
public $name = '佐藤';
}
?>
##終わり
spl_autoload_registerの理解が、まだちゃんとできていないので、
実際に使った時に、加筆修正していきたいと思います。