ってタイトルを書いたはいいけど__autoload()はメソッドではなく関数です。
http://php.net/manual/ja/language.oop5.autoload.php
適当なクラスを呼び出したが、そのクラスが存在しない場合に自動的に呼び出される関数です。
Fatal error: Class 'Zend_Filter_Word_DashToSeparator' not found.
のエラーが発生しますが、関数__autoload()があった場合はその直前に呼び出されます。
この関数内でどうにかしてZend_Filter_Word_DashToSeparatorをインクルードすることができれば、エラーが発生することなく続きの処理を行うことができます。
関数__autoload()を通ってもクラスが見つからなかった場合には、普段のとおりFatal errorが発生します。
今回はZend_Loader::loadClass()で手っ取り早く実装しました。
たったこれだけでPearやZendクラスを使用する際にrequire_once()を並べる必要が一切なくなります。
もちろんPearライブラリにインクルードパスが通っている必要はありますが。
http://php.net/manual/ja/language.oop5.autoload.php
適当なクラスを呼び出したが、そのクラスが存在しない場合に自動的に呼び出される関数です。
<?php
//__autoloadをセット
function __autoload($className){
require_once('Zend/Loader.php');
try{
@Zend_Loader::loadClass($className);
}catch(Exception $e){}
}
//インクルードしていないクラスをインスタンス化
new Zend_Filter_Word_DashToSeparator('/');
インクルードされていないクラスZend_Filter_Word_DashToSeparatorを呼び出した際、通常であればFatal error: Class 'Zend_Filter_Word_DashToSeparator' not found.
のエラーが発生しますが、関数__autoload()があった場合はその直前に呼び出されます。
この関数内でどうにかしてZend_Filter_Word_DashToSeparatorをインクルードすることができれば、エラーが発生することなく続きの処理を行うことができます。
関数__autoload()を通ってもクラスが見つからなかった場合には、普段のとおりFatal errorが発生します。
今回はZend_Loader::loadClass()で手っ取り早く実装しました。
たったこれだけでPearやZendクラスを使用する際にrequire_once()を並べる必要が一切なくなります。
もちろんPearライブラリにインクルードパスが通っている必要はありますが。
PR
トラックバック
トラックバックURL: