Help us understand the problem. What is going on with this article?

PHPのオートロード(autoload)

PHPのオートロードとは

オートロードとは「自動」で「ロード」してくれる仕組みです。

何をロードしてくるのでしょうか。

それはファイルです。

PHPでは通常

require_once "hogehoge.php";

のように使用したいファイルを明示的に読み込む必要があります。

これを自動的に読み込んでくれる仕組みがオートロードです。

実際にやってみましょう。オートロードを使用するにはcomposerを使います。

composerとは

ディレクトリ構成

C:.
│  composer.json
│  sample01.php
│
└─src
    └─japan
        └─tokyo
                Shinjuku.php

sample01.phpからShinjuku.phpのクラスを使用したいです。

オートローダを使わない場合は

require_once "src/japan/tokyo/Shinjuku.php"

とする必要があります。

オートローダを使う場合は、composerが必要です。

下記のcomposer.jsonを作成し、composer installします。

composer.json
{
    "autoload": {
        "psr-4": {
            "myapp\\": "src/"
        }
    }
}
  • PSR-4というルールに従ってオートロードを使用します。
    • PSR-0というルールもありますが今回は割愛。
  • 物理ディレクトリsrc配下をmyappから始まる名前空間として使用します。
  • 今回はmyappとして1つだけですが、基点となるディレクトリを複数指定することも可能です。

という意味ですが、実際ソースを見たほうがわかりやすいので先へ進みます。

上記のjsonファイルでinstall。

c:\tmp>composer install
You are running composer with xdebug enabled. This has a major impact on runtime performance. See https://getcomposer.org/xdebug
Loading composer repositories with package information
Updating dependencies (including require-dev)
Nothing to install or update
Generating autoload files

これでvendorディレクトリが作成され、autoload.phpも出来上がります。

ちなみにcomposer.jsonファイルの変更をしたらcomposer updateが必要です。
ただし、autoload部分の変更だけであればdumpautoloadで変更が反映されます。

composer dumpautoload

これでオートロードを使用できる準備ができたので、
実行対象のファイルと呼び出し先のファイルを作成します。

sample01.php
<?php
require_once "vendor/autoload.php";

$shinjuku = new myapp\japan\tokyo\Shinjuku();

echo $shinjuku->hello();
  • vendor/autoload.phpをrequire_onceする。(これだけでOK。ほかのファイルのrequireは不要)
  • クラスを使用するには、ディレクトリ構造と対になった名前空間を指定する
src/japan/tokyo/shinjuku.php
<?php
namespace myapp\japan\tokyo;

class Shinjuku {

    function hello(){
        echo "Hello Shinjuku!";
    }

}
?>
  • ファイルが配置されているディレクトリと同様の構造の名前空間を指定する
  • myappというディレクトリはないが、composer.jsonでsrcディレクトリ配下をmyappで指定する設定にしたためこうなっている
  • src配下のファイルはすべてディレクトリ構造と名前空間を合わせればオートロード対象となる
  • ファイル名とクラス名を合わせる必要がある(shinjuku.phpとclass Shinjuku)

実際に実行してみましょう。

実行結果
c:\tmp>php sample01.php
Hello Shinjuku!

以上、PHPのオートロードについてでした。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした