【Web】オレオレフレームワークを作ってみる~自動クラスロード編~

プログラミング PHP Web

【Web】オレオレフレームワークを作ってみる~自動クラスロード編~

最近は肩こりがひどい。
ゲームのやりすぎかな。

たまに温泉でも行かないとダメか~。
外出は自粛すべきかもしれないが
マスク2枚が手に入る予定だから大丈夫か。あんなんダサくて装備できませんわ…

さて、オレオレフレームワークの2回目です。
フレームワークというぐらいだからクラスの読み込みぐらい自動化したいもんです。
includeの嵐になっちゃいますもの。

では、クラスの自動ロード。いってみよう。


クラスを自動的にロードする手段

PHPをやる人なら分かっていると思うが、さらーっと説明。

・auto_load_register
PHPの機能。これは、存在しないクラスのインスタンスを作成する場合に、外部ファイルの読み込みがされていない場合にコールバックされる関数を指定できるという神な機能。

・composetのautoload
PSR-4の記述に基づいたクラスのローディング機能。
今回はこれは非採用。
だってぇ、たいしたことしないのにvendorディレクトリができるのが気に入らない。


どこに作るか

ディレクトリ構造。

├─bases
├─config
├─controllers
├─datas
├─libralies
├─loader
│      AutoLoader.php
├─models
├─templates
│  └─component
└─tmp

loaderディレクトリの中にAutoLoader.phpという名で作成しよう。


AutoLoader.phpをゴリゴリ書く

こんな感じかしら。

<?php

/**
 * AutoLoader
 * 自動ロードクラス
 */
class AutoLoader
{    

    /**
     * directries
     * 対象ディレクトリ。
     * 
     * @var mixed
     */
    protected $directries;

    /**
     * registAutoload
     * autoLoadメソッド登録。
     * 
     * @return void
     */
    public function registAutoload()
    {
        spl_autoload_register(array($this, 'autoLoad'));
    }

    /**
     * addTargetDirectry
     * 対象ディレクトリ追加。
     *  
     * @param  mixed $dir
     * @return void
     */
    public function addTargetDirectry($dir)
    {
        $this->directries[] = $dir;
    }

    /**
     * autoLoad
     * 自動クラスロード処理。
     * @param  mixed $className
     * @return void
     */
    public function autoLoad($className)
    {
        // ディレクトリ
        foreach ($this->directries as $dir) {
            $file = $dir . '/' . $className . '.php';
            if (is_readable($file))
            {
                require_once $file;
                return;
            }
        }
    }
}

24行目のregistAutoload関数ではロードされていないクラスをインスタンス化された場合に呼び出される関数を指定。今回の場合はautoLoad
36行目のaddTargetDirectry関数では単純に読み込みディレクトリを設定。
47行目のautoLoad関数では読み込み処理。

んん。まだ動作確認してないからどうだろう。
何か抜けがありそうな。。。


今日はこの辺にしておこう。
次回はリダイレクト、つまりURLの書き換えとindex.phpの作成かなぁ。

前の記事 次の記事