ホームページ > バックエンド開発 > PHPチュートリアル > PHP 自動ロードメカニズムの概要 - spl_autoload_register() 関数、PHP クラスの自動ロード

PHP 自動ロードメカニズムの概要 - spl_autoload_register() 関数、PHP クラスの自動ロード

angryTom
リリース: 2023-04-07 15:44:02
転載
4847 人が閲覧しました

* include と require の機能は同じですが、include はエラー発生時に警告のみを生成するのに対し、require はエラーをスローしてスクリプトを終了する点が異なります。

# include_once と include の唯一の違いは、include_once はファイルが導入されているかどうかを確認し、導入されている場合は再度導入されないことです。

spl_autoload_register() 関数は、未定義のクラスを自動的にロードする機能を実現するための重要なメソッドです。いわゆる自動ロードとは、新しいクラスを作成するときに、最初にクラス ファイルをインクルードまたは要求する必要があることを意味します。 include または require がない場合、エラーが報告されます。そうすると、ファイルのヘッダーに include や require ファイルをたくさん書かなければならず、非常に面倒です

include や require クラスがない場合に通常に新しいクラスを作成するには、 という考え方があります。つまり、新しいクラスは事前にクラス ファイルをインクルードしなくても通常どおり新しいクラスを作成できるため、ファイル ヘッダーに多くの include(require) を含める必要はありません。実際、これは一種のカプセル化です。

spl_autoload_register 関数を使用すると、上記の機能を実現できますので、実装原理を見てみましょう。

この関数のパラメータは次のとおりです:

最初のパラメータ: autoload_function

これは関数 [メソッド] 名で、文字列または配列 (クラス メソッドの呼び出しに使用されます) にすることができます。この関数 (メソッド) の機能は、new が必要なクラス ファイルをインクルード (要求) し、new が使用されたときにファイルが見つからないようにすることです。実際、プロジェクト全体の include 関数と require 関数がカプセル化されています。

2 番目のパラメーター: throw

このパラメーターは、autoload_function が正常に登録できない場合に spl_autoload_register() が例外をスローするかどうかを設定します。

3 番目のパラメータ: prepend

これが true の場合、spl_autoload_register() は関数をキューの末尾ではなくキューの先頭に追加します。

新しいクラスを作成し、クラス ファイルが含まれていない場合、autoload_function メソッドが実行されます。

まずエラーの例を見てみましょう:

<?php
//当我们直接new一个未包含class类文件时候会报错
$objDemo = new AutoloadClass();
ログイン後にコピー

spl_autoload_register() 関数を使用した修正

#次の例から、new が含まれていないクラスの場合、最初のパラメータの関数名 spl_autoload_register の関数が実行されることがわかります。この関数の機能は、このクラスをインクルードすることで(クラス名とファイル名が一致する)、自動ローディング機能を実現します。それが原則であり、それほど複雑ではありません。

<?php
// 定义工具类在服务器位置 常量
define(&#39;TOOLS_ROOT&#39;, __DIR__ . &#39;/&#39;);
 
//文件 autoloadClass.php ,需要new的文件
class AutoloadClass{
 
    public function __construct()
    {
        // echo &#39;你已经包含我了&#39;;
    }
}
//文件autoloadDemo.php文件
spl_autoload_register(&#39;myAutoLoad&#39;, true, true);
function myAutoLoad($className){
    $classFileName = TOOLS_ROOT."{$className}.php";
    include $classFileName;
}
ログイン後にコピー

さらに、これを匿名関数に変更して次のことを実現できます。

<?php
 
// 定义工具类在服务器位置 常量
define(&#39;TOOLS_ROOT&#39;, __DIR__ . &#39;/&#39;);
 
//文件 autoloadClass.php ,需要new的文件
class AutoloadClass{
 
    public function __construct()
    {
        // echo &#39;你已经包含我了&#39;;
    }
}
spl_autoload_register(function ($className)
{
    $classFileName = TOOLS_ROOT."{$className}.php";
    include $classFileName;
}, true, true);
$objDemo = new AutoloadClass();
ログイン後にコピー

PHP 関連の詳細については、PHP 中国語 Web サイト##を参照してください。 #!

以上がPHP 自動ロードメカニズムの概要 - spl_autoload_register() 関数、PHP クラスの自動ロードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:www.whmblog.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート