ホームページ >php教程 >php手册 >php _autoload 自動ロードクラスとメカニズムの分析

php _autoload 自動ロードクラスとメカニズムの分析

WBOY
WBOYオリジナル
2016-06-13 12:02:36940ブラウズ

PHP5 より前では、クラスを使用する必要がある場合、 include/require
test.class.php

Copy code を使用して直接インクルードするだけで済みます。コードは次のとおりです。


class abc{
function __construct()
{
echo 'www.hzhuti.com; }
}
?>

load.php
コードは次のとおりです

コードをコピーしますコードは次のとおりです。

class LOAD
{
static functionloadClass($class_name)
{
$filename = $ class_name.".class.php" ;
if (is_file($filename)) return include_once $filename
}
}
/**
* オブジェクトの自動ロードを設定します
* spl_autoload_register — 指定された関数を __autoload() 実装として登録します
*/
spl_autoload_register(array) ('LOAD', 'loadClass' ));
$a = new Test();// 多くのフレームワークはこのメソッドを使用してクラス
?>
__autoload()
実際のプロジェクトでは、すべてのクラスを 1 つの PHP ファイルに記述することは不可能です。別のファイルで宣言されたクラスを PHP ファイル内で呼び出す必要がある場合は、そのファイルを include で導入する必要があります。ただし、多くのファイルを含むプロジェクトでは、必要なクラス ファイルを 1 つずつインクルードする必要がある場合、各クラス ファイルの先頭にインクルードされるファイルの長いリストを記述しなければならないことが大きな問題となります。使用するときに、このクラスが配置されているphpファイルをインポートできますか?

この目的のために、PHP は __autoload() メソッドを提供します。このメソッドは、まだ定義されていないクラスを使用しようとすると自動的に呼び出されます。この関数を呼び出すことにより、スクリプト エンジンは、PHP がエラーで失敗する前に、必要なクラスをロードする最後のチャンスを得ることができます。
__autoload() メソッドによって受け取られるパラメータの 1 つは、ロードされるクラスのクラス名です。そのため、この時点では、クラス名は Person.php などのファイル名に対応する必要があります。対応するクラス名は Pserson です。 。
以下の完全な例を見てください



コードをコピーします

コードは次のとおりです: class ClassA{

public function __construct (){

echo “ClassA ロード成功!”;
}
}
//クラス ClassA を定義します。ファイル名は ClassA.php
class ClassA{
public function __construct (){
echo “ClassA ロード成功!”
}
}
class ClassB extends ClassA {
public function __construct(){
//parent ::__construct() ;
echo “ClassB ロード成功!”;
}
}
//クラス ClassB を定義し、ファイル名は ClassB.php、ClassB は ClassA
クラスを継承しますClassB は ClassA を拡張します {
public function __construct(){
//parent::__construct();
echo “ClassB ロード成功!”
}
}

;
2 つを定義します。 クラスをテストした後、次のように __autoload() メソッドを含む PHP 実行プログラム ファイルを作成します。



コードをコピーします

コードは次のとおりです。次のように: function __autoload($classname){

$classpath=”./”.$classname.'.php';

if(file_exists($classpath)){
require_once($classpath );
}
else{
echo 'class file'.$classpath.'not found!';
}
}
$newobj =新しいクラスA();
$newobj = 新しいクラスB();

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。