* 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('TOOLS_ROOT', __DIR__ . '/'); //文件 autoloadClass.php ,需要new的文件 class AutoloadClass{ public function __construct() { // echo '你已经包含我了'; } } //文件autoloadDemo.php文件 spl_autoload_register('myAutoLoad', true, true); function myAutoLoad($className){ $classFileName = TOOLS_ROOT."{$className}.php"; include $classFileName; }
さらに、これを匿名関数に変更して次のことを実現できます。
<?php // 定义工具类在服务器位置 常量 define('TOOLS_ROOT', __DIR__ . '/'); //文件 autoloadClass.php ,需要new的文件 class AutoloadClass{ public function __construct() { // echo '你已经包含我了'; } } 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 サイトの他の関連記事を参照してください。