コンテンツにスキップ

Autoloaderの書き方

最終更新日: 2021-04-01

PHP で Class を require せずに使えるやつ Laravel の request() とかがどうやって呼ばれてるのかを調べていくうちに辿り着いたのでメモがてら

Class は簡単に読み込めるけど、Function は一筋縄ではいかなさそう ついでに Class に好き勝手プロパティ増やせることも発見した

autoloader を実装

spl_autoload_registerを使う。Laravel は composer が上手いことやってくれてるっぽかった

1
2
3
4
5
6
7
<?
function regist() {
    spl_autoload_register(function() {
        require './Hoge.php';
        require './Piyo.php';
    });
}

使いたいクラス

適当に用意

1
2
3
4
<?
class Hoge {
    public $hoge;
}
1
2
3
4
<?
class Piyo {
    public $piyo;
}

autoloader を呼んで使う

ついでに好き勝手にプロパティも生やす

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?
require './bootstrap.php';
// ここでクラスをautoloadする
regist();

// どこからも呼んでないけど
$h = new Hoge;
// 生やせる
$h->fuga = "aaa";
$h->hogepiyo = "bbb";

// 使える
$p = new Piyo;
$p->fuga = "aaa";
$p->hogepiyo = "bbb";

var_dump($h, $p);

/*
結果

class Hoge#2 (3) {
  public $hoge =>
  NULL
  public $fuga =>
  string(3) "aaa"
  public $hogepiyo =>
  string(3) "bbb"
}

class Piyo#3 (3) {
  public $piyo =>
  NULL
  public $fuga =>
  string(3) "aaa"
  public $hogepiyo =>
  string(3) "bbb"
}

*/