3

関数spl_autoload_unregisterがあるのはなぜですか? オートローダーを登録した場合、どのような場合に登録を解除しますか? 私には冗長に思えます。

そのトピックの別の質問: 現在、php 5.5 には組み込みの opcache が付属しており、過去には多くのユーザーが apc をインストールしました。オートローダーを一緒に使用する理由はありますか? とにかく、すべてのコードがメモリに移動するため、すべてのphpクラスをロードする1つのファイルを作成する方がよいのではないでしょうか?

4

1 に答える 1

2

複数の autoload メソッドを指定できます。そのため、多数の autoload メソッドを持つアプリケーションを使用している場合は、それらのメソッドも登録解除する必要がある可能性があります。実際には、このメソッドは完全を期すために存在する可能性が高くなります (autoload メソッドの登録を解除したいほど多くのメソッドを使用するプロジェクトはあまり多くありません)。

オペコードのキャッシュは別のトピックです。これはオートロードとは関係ありません。PHP は、ファイルを実行するように指示されると、まずファイルを解析し、マシン レベルの命令コード (オペレーション コード、またはオペコード) を構築します。2 番目のパスは、マシン レベルのコードを実行します。オペコード キャッシング ( APCZend Opcacheなど) はマシン レベルのコードを格納するだけなので、次にそのページを呼び出すときにのみ実行する必要があるため、余分な処理を節約できます。

コメント用に展開

必要に応じてすべてのファイルを含めることができますが、オートロードでは 2 つの重要なことが行われます

  1. 名前空間内でクラスを構造化し、ファイルとディレクトリを使用して名前空間構造をミラー化できます。これにより、各クラス ファイルの場所がすぐにわかるため、クラスの操作が非常に簡単になります。
  2. 必要なときにだけファイルを含めています

opcache に関しては、あなたの考えは正しくありません。使用するすべてのクラスとメソッドを含めるとします。ここで、コード ベースの 25% しか使用しないページがあるとします。つまり、残りの 75% をロードし、opcache に強制的にキャッシュさせたということです。しかし、何のために?Opcache は、プロジェクト レベルではなく、ファイルごとに機能します。したがって、オートローディングにはとにかく必要なコードが動的に含まれているため、すべてのページでコードを肥大化させることになります。

于 2013-11-24T22:37:33.737 に答える