PHPの開発で複数のクラスを使用する場合、require_onceを何行も書いているのなら、autoloadを利用してみませんか。autoloadを使えば、JSON形式のファイルを準備しておくだけで、外部のソースファイルを管理できます。
とはいえ、autoloadの仕組みを正しく理解していないと活用できません。
そこで今回はPHPのautoloadの基本と使い方について解説します。
目次
PHPで外部ファイルを使う方法
PHPで開発するシステムが大きくなると、それだけ使用するクラスの数も増えます。さらに、GitHubで公開されたライブラリを使うケースもあるでしょう。そのため、Webページを作るのに、複数のクラスを読み込むPHPファイルは珍しくありません。
そして、複数のクラスを扱うのに便利な機能がautoloadです。autoloadを説明する前に、PHPで複数のファイルを扱う方法について解説します。
PHPで外部ファイルを扱う方法
PHPでは、外部のソースファイルを読み込む方法が複数用意されています。
require
require_once
include
include_once
autolaod
このうち、autoload以外の4つは、読み込むファイル名を指定しなければなりません。もし、外部ファイルを1つだけ使う場合は、require_onceで十分です。
しかし、幾つもの外部ファイルを使う場合は、どうなるでしょうか。Webシステムを構成する全てのページを生成するPHPファイルで、require_onceをチェックしなければなりません。
それなら、複数のクラスをたった1行で読み込めて、管理も容易なautolaodを使いましょう。
規模が大きなPHPのやり方
プログラミングの考え方の基本は、共通に使える処理をライブラリ化し、新規に作成するコードの量をできるだけ少なくすることです。そして、その考えを基にしたオブジェクトやクラスの概念が、多くのプログラム言語で採用されています。
PHPでも、オブジェクトやクラスを利用可能です。特に規模の大きなWebシステムでは、ライブラリとして用意されている機能も多く、複数の外部ファイルを使用します。
さらに、開発に関わるプログラマーも多いことから、チームで共通した外部ファイルを参照する仕組みが必要です。そして、autoloadは、そのようなチームによるWebシステムの開発に向いた方法です。
チーム環境の統一に向いたautoloadの仕組み
PHPのautoloadでは、composerというコマンドを使用します。なお、composerでは、専用の設定ファイルに、参照する外部ファイルを登録することで、インストールやアップデートを簡略化する仕組みです。
また、autoloadのメリットはそれだけではありません。composerの設定ファイルをチームで共通にしておけば、簡単に同じ環境を用意できます。そのため、autoloadは、チームによるPHPのシステム開発にとって、必須の仕組みと言えるでしょう。
autoloadの使い方
PHPには、標準のautoloadの仕組みもありますが、今広く使われている方法は、先ほど紹介したcomposerを利用する方法です。次から、conposerコマンドを利用した、PHPのautoloadの使い方について解説します。
そもそもcomposerとは何か
今回紹介するcomposerとは、PHPのライブラリの依存性を管理するための、Nils Adermann氏とJordi Boggiano氏が共同で開発し公開しているソフトウェアです。そして、PHPがインストールされた環境で動作します。
なお、標準のPHPには含まれていませんが、composerの公式サイトからダウンロードできるほか、Linux系のOSならaptコマンドやyumコマンドによりインストールが可能です。
PHPの開発環境でautoloadを利用する場合は、自分の環境に合わせてcomposerをインストールしてください。
composerが作る管理ファイル
composerをインストールしたら、作業フォルダ、または、作業ディレクトリで、composerの初期化コマンドを実行してください。これで、composer.jsonという、JSONフォーマットのテキストファイルが作られます。
そして、このファイルに、開発で使用するPHPのライブラリを記述することで、インストールやアップデートなどの管理が可能です。
さらに、composer.jsonに記述したライブラリをcomposerコマンドでインストールすると、vendorというフォルダ、または、ディレクトリが作られ、その下に参照するPHPファイルautolaod.phpが作られます。
このファイルを編集するPHPのソースファイルで読み込んでください。これだけで、指定したライブラリが全て読み込まれます。
1 2 3 4 5 6 7 8 9 10 |
composer.jsonの例 { "name": "user-test/project", "require": {}, "autoload": { "psr-4": { "Test\\": "src/" } } } |
autolaod.phpの使い方
先ほど紹介した、composerコマンドが作成したautolaod.phpを読み込む例を次に紹介します。
1 |
require_once 'vendor/autoload.php'; |
この1行だけで、composerが管理するライブラリを読み込めます。
autoloadの設定例
先ほど例として紹介したcomposer.jsonを使って、autoloadを利用する手順を紹介します。
1 2 3 4 5 6 7 8 9 10 |
composer.jsonの例 { "name": "user-test/project", "require": {}, "autoload": { "psr-4": { "Test\\": "src/" } } } |
このcomposer.jsonをautoloadで利用するためには、まず下記のコマンドを実行します。
1 2 3 4 |
$ composer dumpautoload Generating autoload files Generated autoload files $ |
これで、autoloadの設定を施したvendor/autoload.phpが作られるので、PHPファイルで読み込みます。なお、composer.jsonファイルで、autoloadの設定で、「psr-4」を使っていますが、これは、名前空間を使う仕様です。
この例では、srcフォルダの下にあるPHPファイルを、「Test\クラス名」として参照します。autoloadを利用するPHPファイルでは、次のようにuseコマンドを使って、クラス名を宣言してください。
1 2 3 4 5 6 7 |
<?php require "vendor/autoload.php"; use Test\TestClass1; new TestClass1(); ?> |
また、srcの中に配置するクラスを定義したphpファイルでも、composer.jsonに合わせて、次のようにnamespaceを宣言します。
1 2 3 4 5 6 7 8 9 |
<?php namespace Test; class TestClass1 { function __construct() { echo "new instance create TestClass1\n"; } } ?> |
autoloadを利用する際の注意点
これまで解説したように、composerのautoloadは、幾つもライブラリを使ったPHPの開発に向いた仕組みです。しかし、正しく理解しないで利用すると、autoloadがうまく動作しないケースもあります。次から、そのような注意点を紹介します。
composerでアップデートしたのに反映されない
composerは、PHPのライブラリの依存性を管理する仕組みですが、composer.jsonにライブラリを追加したのに、autoload対象にならない、と質問された、という話をよく聞きます。
これは、composer.jsonを編集したのに、composerで次のコマンドを実行していないケースです。
1 |
$ composer dumpautoload |
もし、composer.jsonを編集したら、このコマンドを必ず実行してください。
クラスを記述したファイルが読み込まれない
autoloadを利用する場合、クラス名とそのクラスを記述したファイ名を合わせなければなりません。例えば、sampleClassというクラスを利用する場合は、それを記述するのはsampleClass.phpです。
通常、違う名前のファイルに書いた場合は、autoloadに失敗します。もし、どうしても違うファイル名を使う必要がある場合は、次のコマンドを試してみてください。
1 |
$composer dump-autoload --optimize |
まとめ
PHPの開発では、幾つものクラスを記述したファイルを使用します。そして、それらを効率良く管理するのに最適な方法が、今回紹介したautoloadです。最初、設定するのが難しいと感じるかもしれません。
しかし、利用し始めると、その便利さに手放せなくなります。ぜひ、PHPによるシステム課発で活用してください。