PHP __autoload
?
(1)?オートロードメカニズムの概要
PHP の OO モデルを使用してシステムを開発する場合、通常は各クラスの実装を別のファイルに保存するのが通例であり、これによりクラスの再利用も容易になります。将来のメンテナンスのために。これは、OO デザインの基本的な考え方の 1 つでもあります。 PHP5 より前では、クラスを使用する必要がある場合、include/require を使用してクラスを直接インクルードするだけで済みました。実際の例を次に示します:
/* Person.class.php */ <?php class Person { var $name, $age; function __construct ($name, $age) { $this->name = $name; $this->age = $age; } } ?> /* no_autoload.php */ <?php require_once (”Person.class.php”); $person = new Person(”Altair”, 6); var_dump ($person); ?>
この例では、no-autoload.php ファイルは、require_once を使用してファイルを含める Person クラスを使用する必要があります。その後、その Person クラスを直接使用してオブジェクトをインスタンス化できます。
しかし、プロジェクトの規模が拡大し続けると、この方法を使用するといくつかの隠れた問題が発生します。PHP ファイルが他の多くのクラスを使用する必要がある場合、多くの require/include ステートメントが必要になり、これにより問題が発生する可能性があります。クラスファイルが存在しないか、不要なクラスファイルが含まれています。多数のファイルで他のクラスの使用が必要な場合、各ファイルに正しいクラス ファイルが含まれていることを確認するのは悪夢のような作業になります。
PHP5 は、クラスの自動ロード メカニズムというこの問題の解決策を提供します。オートロード機構により、PHP プログラムは最初からすべてのクラス ファイルを組み込むのではなく、クラスが使用される場合にのみクラス ファイルを自動的に組み込むことができます。この機構は遅延ロードとも呼ばれます。
次は、自動ロード メカニズムを使用して Person クラスをロードする例です: /* autoload.php */
<?php function __autoload($classname) { require_once ($classname . “class.php”); } $person = new Person(”Altair”, 6); var_dump ($person); ?>
通常、PHP5 がクラスを使用するときに、そのクラスがロードされていないことが判明すると、自動的に __autoload() 関数が実行され、使用する必要があるクラスをロードできます。この簡単な例では、拡張子「.class.php」を付けたクラス名を直接追加してクラス ファイル名を形成し、require_once を使用してそれをロードします。この例から、autoload は少なくとも 3 つのことを行う必要があることがわかります。1 つ目はクラス名に基づいてクラス ファイル名を決定すること、2 つ目はクラス ファイルが配置されているディスク パスを決定することです。私たちの場合、それが最も単純です。クラスがそれらを呼び出す PHP プログラム ファイルと同じフォルダーにある場合、3 番目のことは、クラスをディスク ファイルからシステムにロードすることです。 3 番目のステップは最も単純で、include/require を使用するだけです。第 1 ステップと第 2 ステップの機能を実現するには、クラス名とディスク ファイル間のマッピング方法を開発時に合意する必要があります。この方法でのみ、クラス名に基づいて対応するディスク ファイルを見つけることができます。
したがって、インクルードするクラス ファイルが多数ある場合は、対応するルールを決定し、__autoload() 関数でクラス名と実際のディスク ファイルを一致させるだけで遅延読み込みを実現できます。効果 。ここから、 __autoload() 関数の実装で最も重要なことは、クラス名と実際のディスク ファイルの間のマッピング ルールの実装であることもわかります。
出典: http://space.itpub.net/14883374/viewspace-526720