2012-03-07 14 views
4

PHPクラスを手動で組み込む場合は、現在のスクリプトが実行されている間に行うことができます。条件が合致すればそれをロードし、そうでなければあなたが決定することができます。このように:PHP 5のオートロードは非効率的ですか?

if ($_SERVER['REQUEST_METHOD'] === 'POST') { 
    include '../../../Whatever/SanitizeUserInput.class.php'; 
    SanitizeUserInput::sanitize($_POST['someFieldName']); 
} 

しかし、のは、私はこのクラスでautoload機能を使用するとしましょう。 が最初にロードされますか、使用されている場合にのみロードされますか?

__autoload機能は、スクリプト(など、データベース接続、セッション管理など)で使用することを100%保証するクラスでのみ追加する必要がありますか?

ありがとう

+0

は[spl_autoload_register](http://www.php.net/manual/en/function.spl-autoload-register.php)を使用しての@Timur提案して行くだろうパースペクティブ私はなぜautoloadが効率的でなくてはならないのか分かりません...あなたのカスタムロジックに基づいてインスタンスが作成されたときにクラスをロードするのがアイデアです...それでいいはずです – optimusprime619

+0

オートローディングを使うかしないかクリーンなデザインの問題。 – KingCrunch

+1

@KingCrunch - あなたはどちらがきれいなものだと思いますか? – martinstoeckli

答えて

6

自動ロードは、希望のクラスにアクセスしようとしているときにのみ呼び出されます。あなたは「hasnクラス/インタフェースを使用しようとしている場合にはあなたが自動的に と呼ばれる__autoload()関数を定義することが

:そして、代わりに__autoload

ドキュメントのspl_autoload_register()を使用する方が良いだろうまだ が定義されています。

spl_autoload_register() オートロードクラスのより柔軟な選択肢を提供します。このため、__autoload()を使用することは推奨されず、将来廃止または削除される可能性があります( )。あなたは使用まだロードされていないクラスにしようとしているときで

4

オートローディングキック:このよう

include 'foo.php'; 
new Foo; // autoload not used, because the class already exists 

// Bar is not yet loaded here, auto or otherwise 

new Bar; // Bar is being autoloaded, because it was not yet loaded 

は、オートローディングは非常に効率的にすることができます。 autoload関数を呼び出すオーバーヘッドのために、クラスを必要なときに手動でロードするよりも効率が少し劣ります。しかし、ロードされたクラスを手作業で追跡することは、自動ロードよりもほとんど戻りません。

2

PHPがクラスを突き抜けても、まだ分かっていないときはいつでも、あなたのオートロード機能が呼び出されます。あなたのautoload関数がPHPにクラスがどのファイルであるかを伝えると、このファイルがロードされます。

答えを簡潔にするために、PHPは必要なときにファイルをロードします。これは条件にも当てはまります。したがって、次のテストクラスは決してロードされません。それは、より柔軟なようだし、私からのよう

if (false) 
{ 
    $test = new CTest(); // never loaded with autoload. 
} 
関連する問題