オートローダー

はじめに

EnviPHPではクラスファイルの読み込みに、require_onceinclude_onceと言った、仕組みを利用しません。

代わりに、この項目で説明する、オートローダーの仕組み、もしくは、エクステンションの仕組みを利用して下さい。

Envi PHP はspl_autoload_registerの仕組みを利用して、オートローダーを実現しています。

オートロードの仕組みや内容について不明なことがあれば、PHPのマニュアルを参考にしてください。

ルール

Envi PHPにオートロードされるクラスは、すべて一意な名前である必要があります。 なぜなら、クラスが重複している場合は、オートロードされないためです。

newされるクラス、もしくは、第二引数を省略して、class_existsされるクラスは、すべて、

<クラス名>.php

という命名規則に沿って、作成されなければなりません。 どこのディレクトリであるかは、一切の関係はありません。

注意: class_existsの第二引数に注意して下さい。 意図せず、オートローダーが実行され、処理が非常に重くなる場合があります。

キャッシュ

auto_load_cache の設定が、trueとなっている場合は、オートローダーから読み込まれるファイルのリストは、すべてキャッシュされます。

デバッグモードの場合は、変更を自動で検出しますが、本番モードでは明示的にキャッシュを削除するまでは、 キャッシュが更新されることはありません。

そのため、ファイルのリネームや、追加、削除が行われた場合は、キャッシュの削除を行う必要があります。

実行時設定

{app_key}.ymlの設定によって動作が変化します。

## 常にオートロードされるディレクトリ
  AUTOLOAD_CONSTANT:
## <?php $ds = DIRECTORY_SEPARATOR; $base = ("/usr/local/webapp/apps{$ds}{$app_name}").$ds; ?>

    - "<?php echo ENVI_BASE_DIR.'vendor'.DIRECTORY_SEPARATOR;?>"
    - "<?php echo "{$base}libs{$ds}controller{$ds}";?>"
    - "<?php echo "{$base}libs{$ds}constant{$ds}";?>"

## コールされた時にオートロードされるディレクトリ
  AUTOLOAD:
    - "<?php echo ENVI_BASE_DIR.'plugins'.DIRECTORY_SEPARATOR;?>"
    - "<?php echo "{$base}libs{$ds}common{$ds}";?>"
    - "<?php echo "{$base}libs{$ds}models{$ds}";?>"
    - "<?php echo "{$base}libs{$ds}models{$ds}om{$ds}";?>"

## コールされた時にオートロードされるディレクトリ(キャッシュなし。PSR-0準拠)
  AUTOLOAD_PSR:
    - "<?php echo "{$base}libs{$ds}";?>"
名前 説明
AUTOLOAD_CONSTANT 入力フィルタ実行前にすべて読み込まれるクラス。毎回呼び出されるようなクラス群はこちらに定義しておくのがおすすめです。ディレクトリ単位で定義します。
AUTOLOAD クラスが実行される前に、読み込まれるクラス。特定条件でのみ読み込まれるクラス群はこちらに定義するのがおすすめです。ディレクトリ単位で定義します。3.4~ PSR-0準拠でオートロードを試みます。それ以前のバージョンでは、ディレクトリの中身は再帰読み込みされません。auto_load_cacheをtrueにする事で、ファイルの一覧はキャッシュされているため、高速に読み込みます。
AUTOLOAD_PSR 3.4~ PSR-0準拠でオートロードする基底ディレクトリを指定して下さい。 auto_load_cacheの設定如何によらず、ファイルの一覧はキャッシュされないため、非常に大きなパッケージの場合は、キャッシュするよりも高速に動作する場合があります。
  SYSTEM:
    auto_load_cache: true
名前 デフォルト 説明
auto_load_cache true オートロードされるファイルをキャッシュするかどうかを設定します。