忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2017/06/27 05:49 |
PHP5.3 マジックメソッド__autoload()
ってタイトルを書いたはいいけど__autoload()はメソッドではなく関数です。
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


2011/05/13 21:48 | Comments(0) | TrackBack(1) | PHP

トラックバック

トラックバックURL:
前回__autoload()を紹介しましたが、__autoload()はひとつしか登録できません。 spl_autoload_register()を使うとオートローディングの実装を複数登録できます。 <?php //オートロード実装その1 function autoload1($className){ require_once(''Zend/Loader.php''); try{ @Zend_Loader::loadClass($className); ...
弱小PHPerの憂鬱 | 2011/05/16 21:20

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<今週の実績 2011/05/15 | HOME | PearとOpenPearのパッケージが被る>>
忍者ブログ[PR]