2011-02-01 4 views
-1

は、このような関数を定義している私が持っている一部のレガシーPHPコード(およびクラスは、これらの特定(クラス名)_class.phpファイルが存在するパスをあるPHPでクラスをオートロードするのは良い方法ですか?

function __autoload($class_name) 
{ 
    $filename=CLASSES. strtolower($class_name) . '_class.php'; 
    if (file_exists($filename)) 
    { 
     require_once $filename; 
    } 
} 

あります。

上記の機能はどこにでも含まれているファイルである

これは許容練習です - 。?。私はそれは好みの問題だと思う。このようにそれを使用して任意の落とし穴

答えて

1

autoload関数は、クラス定義が不明な場合にファイルをロードします。したがって、@フラン=ベローナと@アンディパトンは恐れて、あなたはあなたがすべてのクラスをオートロードすることを心配する必要はありません。

あなたはすべてのあなたのコード内の関数をロードしているが、あなたは(new VeryLittleUsedClass()によって例えばまたは静的コールVeryLittleUsedClass::theFunction()トラフ)「verylittleusedclass.class.php」、それが呼び出されたときにのみロードされます。

私はそれが良い習慣だと思います。すべてのファイルをまだ使用しているかどうかを知らずに含める必要はありません。必要な場合はクラスがロードされます。

ファイルの名前を正しく指定する必要があります。

+0

まさに私はこれを書こうとしていました。 '__autoload()'はすべてのクラスを読み込むのではなく、現在のスクリプトで使われているクラスだけを読み込みます。これは、フレームワークで使用されるほとんど常に*非常に良い習慣です。 – Shikiryu

+0

フィードバックのためのNanne、Shikiryu! – Steve

2

私はあまり一般的なautolを使用誤ったファイルを含める確率を減らす機能を提供します。それは間違いなくインクルードメンテナンスを削減します。

1

は、私はそれがこの大会で動作します(また、PEARスタイルのオートローダーと呼ばれる)は、このオートローダhttps://gist.github.com/169617

を使用することをお勧めし

クラス名:Core_DB_Mysql ファイルパス:コア/ DB/MySQLの

することができますあなたのクラスをグループ化します。あなたは何度も何度も

1

手動であなたが使用されます確かに知って、それかもしれないクラスを残して、すべてのクラスが含まれるように親指の良いルールがあるフォルダをスキャンする必要がいけないこの大会で[OK]を

 
Core/Cache 
    Core/Cache/APC 
    Core/Cache/Memcache 

Core/Models 
    Core/Models/User 
    Core/Models/Post 

オートローダーに使用されます。

たとえば、データベースライブラリクラス、いくつかのタイプの設定クラス、国際化クラス、レジストリクラス、インターフェイス定義クラス、カスタム例外クラス、テンプレートエンジンクラスなどがあります。使用されます。

ですから、 を使用して のindex.phpの上に非常に近い、手動でそれらのすべて(あるいは最初のブラウザによって起動されるものは何でもファイル)を含めるべきではそうで$ file2.php を含めると$ file1.php が含まれます....

(あなたが原因のAPCキャッシュを使用する場合)これは

をあなたに最高のパフォーマンスが得られますし、これらのクラスは、APCによってキャッシュされることが保証されている今、あなたのクラスの内部で使用すると、条件付きで、どちらか一方を使用して、いくつかのロジックを有することができますクラス、状況に依存

例えば

場合(要求:: isAjax()){ AjaxResponder :: sendResponse()。 } else { return $ page; }

ここで、オートローダーには必要ない場合もあるので、オートローダーにAjaxResponderクラスをロードさせても問題ありません。

したがって、クラスが必要ない場合は、オートローダーで処理してください。そうでない場合は手動でインクルードしてください。

本当に簡単なルールです。

また、オートローダー機能内でスマートロジックを使用することは非常に重要です。可能であれば の条件テストを最小限に抑え、クラスファイルを見つけるためにディレクトリスキャンのタイプを使用しないようにしてください。

spl_autoload_registerを使用している場合は、登録されたオートロード機能の順序を覚えておいてください。重要な場合は順序。

スマートオートローダクラスの良い例がここ

http://groups.google.com/group/php-standards/web/psr-0-final-proposal

でお知らせ、それがあれば(file_exists())、またはそのような何かを見るために任意のチェックを使用していません。 これは単に require()を使用し、ファイルが見つからない場合にエラーを発生させるためにrequire関数に依存しています。

オートローダー内では、include_once()またはrequire_onceを使用しないでください。 これは意味がありません。オートローダーが呼び出されないクラスが既に含まれていますが、require_onceとinclude_onceはファイルが既に含まれているかどうかを確認するために余分なチェックを行う必要があります。

関連する問題