PHPプロジェクト内において、外部ファイルを使いたいときはrequire文で明示的に読み込む必要があります。
require __DIR__ . '/src/models/User.php';ただし、毎回requireするのも手間ですので、必要に応じて自動で読み込んでくれるオートロードの仕組みをComposerを使って構築するのがおすすめ。
この記事では、Composerを使ってオートロードを設定する方法を丁寧にまとめました。
※Composerの概要や基本の使い方については以下の記事にまとめています。

オートロードの設定
以下のようなディレクトリ構成であるとします。
project
L index.php
L src
L models
L User.php
L classes
L Sample.phpindex.phpからsrc/models/User.phpやsrc/classes/Sample.phpをオートロードしたいと思います。
まずプロジェクトの最上位のディレクトリ(index.phpがあるところ)にcomposer.jsonを作成してください。
composer.jsonのなかには以下のように記述します。
{
"autoload": {
"psr-4": {
"models\\": "src/models",
"classes\\": "src/classes"
}
}
}PSR-4というルールに従ってオートロードを使用することにしています。
PSR-4のほかにPSR-0というルールもありますが、基本的にはPSR-4が採用されるため詳細については割愛しました。
詳しく知りたい方は下記URL参照。
https://qiita.com/inouet/items/0208237629496070bbd4
modelsとclasssesという2つの「名前空間」(わからない方はプログラム上でのグループ分けとでもイメージしておけばOK)を作成し、実際のディレクトリと紐付けています。
もちろん、パッケージのインストールにすでにcomposer.jsonを使っている場合は次のように併記しても問題ありません。
{
"require": {
"vlucas/phpdotenv": "^5.4.1",
"monolog/monolog": "^1.23.0"
},
"autoload": {
"psr-4": {
"models\\": "src/models",
"classes\\": "src/classes"
}
}
}記述が終わったらComposerで設定を反映させます。
まだvendorディレクトリが作成されておらず、新規にインストールする場合は下記コマンド。
$ composer installすでにパッケージインストールなどで使用したためvendorディレクトリが作成されており、既存のcomposer.jsonファイルでオートロード部分だけを書き加えた場合はdumpautoloadしてください。
$ composer dumpautoloadこれでオートロードを使用できるようになりました。
以後、composer.json内のオートロード設定を書き換えるたびにcomposer dumpautoloadをしないと設定が反映されないので注意。
オートロードをもとにファイルの呼び出しを行う
サンプルとして、src/models/User.phpは以下のようにしました。
<?php
namespace models;
class User
{
public function getName()
{
return 'My Name Is Hoge.';
}
}オートロードが正しく動くためにはファイル名(User.php)とクラス名(User)を合わせる必要があるので注意してください。
3行目で、modelsの名前空間に属することを宣言しています。
上記のUser.phpをindex.phpにて呼び出してみましょう。
<?php
require __DIR__ . '/vendor/autoload.php';
$user = new models\User();
echo $user->getName(); //「My Name Is Hoge.」と出力される3行目のrequireのように、必ずComposerが用意したautoload.phpを読み込んでください。
これ1つを読み込んでおけば、他のファイルをrequireする必要はないです。
その上で、new models\User();として(「名前空間\クラス名」の形で)Userクラスのインスタンスを作成しました。
いきなりインスタンスを作っていますが、オートロードのおかげで読み込みエラーが発生することなく処理が実行されています。
参考までに、src/classes/Sample.phpも以下のように設定してみます。
<?php
namespace classes;
class Sample
{
public function hello()
{
return 'Hello!';
}
}User.phpと同じように、namespaceにて名前空間classesに属するものだということを宣言するのを忘れずに。
これでindex.phpではrequireすることなく使えます。
<?php
require __DIR__ . '/vendor/autoload.php';
$user = new models\User();
echo $user->getName();
$sample = new classes\Sample();
echo $sample->hello(); //「Hello!」と出力されるオートロードの仕組みは以上です。
まとめ
外部のパッケージ(ライブラリ)の依存関係を解決してインストールできるようにするのがComposerの本来の役目ですが、自作クラスのオートロードにも使うことができます。
composer.jsonで名前空間を指定composer dumpautoloadで設定を反映require不要でクラスを利用
の流れで、オートロードが活用できます。
実際にPHPにてWEBアプリケーションを作るときに役立つ方法なので、ぜひ導入してみてください。

コメント