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

PHPのautoloadについて

More than 3 years have passed since last update.

autoloadとは

ファイルを自動で読み込む仕組みのこと。

クラスを作成する場合、再利用する性質上1クラスを1ファイルで管理することになる。
しかし扱うファイル数が増えた時に、各スクリプトの先頭で一つ一つrequireしなければいけなくなる。

そこでファイルを自動で読み込む仕組みであるautoloadを使用する。

spl_autoload_register

通常autoloadも使用せずファイルの読み込みも行っていない場合、このタイミングでfatal errorになる。

<?php
$hoge = new Hoge();  //fatal error

spl_autoload_registerを使用してオートローダーを登録しておくと、PHPがエラーで止まる前に登録したメソッドが呼び出される。

spl_autoload_registerを使わない場合

<?php
require_once 'MyClass1.php';
require_once 'MyClass2.php';
require_once 'MyClass3.php';

$obj  = new MyClass1();
$obj2 = new MyClass2();
$obj2 = new MyClass3();

spl_autoload_registerを使う場合

<?php
spl_autoload_register(function ($class_name) {
    require_once $class_name . '.php';
});

$obj  = new MyClass1();
$obj2 = new MyClass2();
$obj3 = new MyClass3();

composerでautoloadを設定する

spl_autoload_registerを使用して自前で作成しなくても、composer-autoloadで実装が出来る。

composerをダウンロード

$ curl -s https://getcomposer.org/installer | php

conposer.jsonファイル

composer.jsonというファイルを作成し、autoloadの設定をしていく。

{
    "autoload": {
        "psr-4": {
            "Namespace\\": "DirName/"
        }
    }
}

psr-4という規約にのっとって作成し、namespace Namespaceと宣言されたクラスは、DirNameというディレクトリの中にあるということを設定している。

autoload.phpの作成

$ composer dump-autoload

これでvenderディレクトリにautoload.phpが作成される。
あとは作成されたautoload.phpをbootstrap.phpなどでrequireすればautoloadが使用できる。
(bootstrap.phpはアプリケーション全体の設定を作成する・読み込むのに使用されるファイルのこと。)

yyphp
PHPerが毎週集まり、ざっくばらんに情報交換する雑談コミュニティ
https://yyphp.connpass.com/
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