目次
Zend_Loader クラスは、ファイルを動的に読み込むためのメソッドを提供します。
Zend_Loader 対 require_once() | |
---|---|
Zend_Loader のメソッドは、読み込みたいファイルの名前が変化する場合に便利です。
たとえば、ユーザの入力やメソッドの引数などのパラメータに基づいたファイル名を使用する場合などです。
もし読み込むファイルやクラスの名前が決まっている場合は、
|
静的メソッド Zend_Loader::loadFile()
は、PHP ファイルを読み込みます。
読み込まれるファイルには任意の PHP コードを含めることができます。
このメソッドは PHP 関数
include()
のラッパーで、失敗した場合 (たとえば指定したファイルが存在しないなど)
には Zend_Exception
をスローします。
引数 $filename
には読み込むファイル名を指定します。
ここにはパス情報を含めてはいけません。$filename
に対してはセキュリティチェックが行われます。
$filename
に含めることができるのは英数字、ダッシュ ("-")、
アンダースコア ("_") あるいはピリオド (".") だけです。
引数 $dirs
にはそのような制限はありません。
引数 $dirs
にはファイルを探すディレクトリを指定します。
NULL
の場合は include_path
の中のみを対象とします。
文字列あるいは配列を指定すると、指定されたディレクトリをまず探した後で、それから
include_path
を探します。
引数 $once
は論理値です。TRUE
を指定すると、
Zend_Loader::loadFile()
は PHP の関数
include_once()
でファイルを読み込みます。それ以外の場合は
include()
を使用します。
静的メソッド Zend_Loader::loadClass($class, $dirs)
は、PHP ファイルを読み込んでクラスが存在するかどうかを確かめます。
例 17.2. loadClass() メソッドの例
<?php Zend_Loader::loadClass('Container_Tree', array( '/home/production/mylib', '/home/production/myapp' ) ); ?>
クラスを指定する文字列は、アンダースコアをパス区切り文字に変換し、 最後に '.php' を追加されます。上の例では、 'Container_Tree' は 'Container/Tree.php' となります。
$dirs
に文字列あるいは配列を指定すると、
Zend_Loader::loadClass()
は指定した順にそのディレクトリを探します。
そして最初に見つかったファイルを読み込みます。
ディレクトリ $dirs
にファイルがみつからない場合は、
PHP の include_path で指定された場所を探します。
ファイルが見つからない場合、あるいは読み込んだファイルにクラスが存在しない場合は
Zend_Loader::loadClass()
は Zend_Exception
をスローします。
ファイルの読み込みには Zend_Loader::loadFile()
を使用するので、
クラス名として指定できるのは
英数字とハイフン ('-')、アンダースコア ('_') そしてピリオド ('.') だけです。
静的メソッド Zend_Loader::isReadable($pathname)
は、指定した場所にファイルが存在して読み込み可能な場合に
TRUE
、それ以外の場合に FALSE を返します。
例 17.3. isReadable() メソッドの例
<?php if (Zend_Loader::isReadable($filename)) { // $filename で何かをします } ?>
引数 $filename
で、調べたいファイル名を指定します。
ここにはパス情報を含めることもできます。
このメソッドは、PHP の関数
is_readable()
のラッパーです。この関数は include_path
を探しませんが、Zend_Loader::isReadable()
は include_path
も検索対象に含めます。
Zend_Loader クラスには、PHP の SPL
自動ローダーに登録するためのメソッドが含まれています。そのコールバックメソッドが
Zend_Loader::autoload()
です。利便性を考慮して、
Zend_Loader では registerAutoload()
関数を提供しています。
この関数は、autoload()
メソッドを登録するものです。
spl_autoload
拡張モジュールが使用できない環境の場合は、
registerAutoload()
メソッドは Zend_Exception をスローします。
Zend Framework の autoload コールバックを登録すると、
明示的に読み込まなくても Zend Framework のクラスを参照できるようになります。
autoload()
メソッドは、クラスを参照する際に自動的に
Zend_Loader::loadClass()
を使用します。
Zend_Loader クラスを継承した場合は、registerAutoload()
に引数を追加することができます。この引数で、どのクラスから
autoload()
メソッドを登録するのかを指定します。