機能が似ていることもあり、Zend_Loaderからspl_autoload_register()を操作することができます。
http://framework.zend.com/manual/1.11/ja/zend.loader.load.html
> Autoloader の使用法
> そのコールバックメソッドが Zend_Loader::autoload() です。
> 利便性を考慮して、 Zend_Loader では registerAutoload() 関数を提供しています。
って書いてあるんだけど実際registerAutoload()には
よってZend_Loader_Autoloaderを使ってみたいと思いますが、マニュアルが和訳されていないので手探りでやってみます。
今後、前回までのようにZend_Loader::loadClass($className)を書く必要はありません。
ただ何故かPearのクラスは適用範囲外になります。
setZfPath()はZendFrameworkのパスを指定します。
特徴的なのは第二引数を指定することで任意のバージョンをセットできるというところです。
過去バージョンでの動作確認などを簡単に行えます。
ただ何故かディレクトリ名の許容範囲がやたらと狭く、例のような引数を与えた場合、ディレクトリ名が
"C:\PEAR/ZendFramework-1.2.2/library"あるいは"C:\PEAR/1.2.2-minimal"のような形に勝手に決まってしまいます。
http://framework.zend.com/manual/1.11/ja/zend.loader.autoloader.html#zend.loader.autoloader.zf-version
任意のパスを登録することができません。
何故だ。
pushAutoloader()でオートロード用関数を登録します。
http://framework.zend.com/manual/1.11/ja/zend.loader.load.html#zend.loader.load.autoload
使い方は基本的にspl_autoload_register()と同じです。
どうもいまいち便利なのかよくわからないクラスだ。
普通に使う分にはspl_autoload_register()のほうが手っ取り早いので、あくまでsetZfPath()を使用しての開発用・動作検証用というスタンスのクラスではないかと思われます。
http://framework.zend.com/manual/1.11/ja/zend.loader.load.html
> Autoloader の使用法
> そのコールバックメソッドが Zend_Loader::autoload() です。
> 利便性を考慮して、 Zend_Loader では registerAutoload() 関数を提供しています。
って書いてあるんだけど実際registerAutoload()には
public static function registerAutoload($class = 'Zend_Loader', $enabled = true)
trigger_error(__CLASS__ . '::' . __METHOD__ . ' is deprecated as of 1.8.0 and will be removed with 2.0.0;
use Zend_Loader_Autoloader instead', E_USER_NOTICE);
}
って書いてあります。よってZend_Loader_Autoloaderを使ってみたいと思いますが、マニュアルが和訳されていないので手探りでやってみます。
<?php
//オートロード用関数
function autoload1($className){
class AutoLoad1{}
}
//Zend_Loader_Autoloader
require_once('Zend/Loader/Autoloader.php');
$autoLoader = Zend_Loader_Autoloader::getInstance();
//ZFのパスをセット
$autoLoader->setZfPath('C:\xampp\php\PEAR','1.2.2');
//NotFoundエラーの発生抑止
$autoLoader->suppressNotFoundWarnings(true);
//pushAutoloader
$autoLoader->pushAutoloader('autoload1');
//オートロード
new Zend_Filter_Word_DashToSeparator('/');
new AutoLoad1();
実はZend_Loader_Autoloader::getInstance()した時点でZendフレームワークについては自動的にオートロードが適用されます。今後、前回までのようにZend_Loader::loadClass($className)を書く必要はありません。
ただ何故かPearのクラスは適用範囲外になります。
setZfPath()はZendFrameworkのパスを指定します。
特徴的なのは第二引数を指定することで任意のバージョンをセットできるというところです。
過去バージョンでの動作確認などを簡単に行えます。
ただ何故かディレクトリ名の許容範囲がやたらと狭く、例のような引数を与えた場合、ディレクトリ名が
"C:\PEAR/ZendFramework-1.2.2/library"あるいは"C:\PEAR/1.2.2-minimal"のような形に勝手に決まってしまいます。
http://framework.zend.com/manual/1.11/ja/zend.loader.autoloader.html#zend.loader.autoloader.zf-version
任意のパスを登録することができません。
何故だ。
pushAutoloader()でオートロード用関数を登録します。
http://framework.zend.com/manual/1.11/ja/zend.loader.load.html#zend.loader.load.autoload
使い方は基本的にspl_autoload_register()と同じです。
どうもいまいち便利なのかよくわからないクラスだ。
普通に使う分にはspl_autoload_register()のほうが手っ取り早いので、あくまでsetZfPath()を使用しての開発用・動作検証用というスタンスのクラスではないかと思われます。
PR
トラックバック
トラックバックURL: