PHPのspl_autoload_register()関数の使い方の詳しい説明

墨辰丷
リリース: 2023-03-29 10:22:01
オリジナル
13047 人が閲覧しました

この記事では、主に PHP の spl_autoload_register() 関数の使用法を紹介し、__autoload 関数と spl_autoload_register 関数の関連使用スキルを例の形式で分析します。自習マニュアル

この関数を理解する前に、別の関数 __autoload を見てみましょう。
1. __autoload


これは自動ロード関数です。PHP5 では、未定義のクラスをインスタンス化すると、この関数がトリガーされます。次の例を見てください:

printit.class.php:

<?php
class PRINTIT {
 function doPrint() {
 echo &#39;hello world&#39;;
 }
}
?>
ログイン後にコピー

index.php

<?
function __autoload( $class ) {
 $file = $class . &#39;.class.php&#39;;
 if ( is_file($file) ) {
 require_once($file);
 }
}
$obj = new PRINTIT();
$obj->doPrint();?>
ログイン後にコピー

index.phpを実行すると、hello worldが正常に出力されます。 Index.php では、printit.class.php が含まれていないため、printit をインスタンス化する際に、自動的に __autoload 関数が呼び出されます。このとき、パラメータ $class の値は、printit.class.php が導入されます。 。

この方法はオブジェクト指向でよく使用され、多くの参照ファイルの作成を回避し、システム全体をより柔軟にすることができます。

2. spl_autoload_register()

spl_autoload_register() をもう一度見てください。簡単な例を見てみましょう:

<?
function loadprint( $class ) {
 $file = $class . &#39;.class.php&#39;;
 if (is_file($file)) {
 require_once($file);
 }
}
spl_autoload_register( &#39;loadprint&#39; );
$obj = new PRINTIT();
$obj->doPrint();?>
ログイン後にコピー
__autoload をloadprint 関数に置き換えます。ただし、loadprint は __autoload のように自動的にトリガーされません。この時点では、未定義のクラスが見つかったときに spl_autoload_register() が機能します。

spl_autoload_register() は静的メソッド

<?
class test {
 public static function loadprint( $class ) {
 $file = $class . &#39;.class.php&#39;;
 if (is_file($file)) {
  require_once($file);
 }
 }
}
spl_autoload_register( array(&#39;test&#39;,&#39;loadprint&#39;) );
//另一种写法:spl_autoload_register( "test::loadprint" );
$obj = new PRINTIT();
$obj->doPrint();?>
ログイン後にコピー

spl_autoload_register

(PHP 5 >= 5.1.2) を呼び出します

spl_autoload_register — __autoload() 関数を登録します

説明

bool spl_autoload_register ([ コールバック $autoload_function ] )

関数を SPL __autoload 関数スタックに登録します。このスタック内の関数がまだアクティブでない場合はアクティブにします。 __autoload 関数がプログラムに実装されている場合は、__autoload スタックに明示的に登録する必要があります。 spl_autoload_register() 関数は、Zend Engine の __autoload 関数を spl_autoload() または spl_autoload_call() に置き換えるためです。


Parameters

autoload_function

登録するオートロード関数。パラメータを指定しない場合は、autoload のデフォルト実装関数 spl_autoload() が自動的に登録されます。

戻り値

成功した場合は TRUE を返し、失敗した場合は FALSE を返します。

注:

SPL は Standard PHP Library の略称です。これは、PHP5 で導入された拡張ライブラリであり、その主な機能には、オートロード メカニズムとさまざまな Iterator インターフェイスまたはクラスの実装が含まれます。 SPL オートロード メカニズムは、関数ポインタ autoload_func をオートロード関数を持つ自己実装関数にポイントすることによって実装されます。

SPL には 2 つの異なる関数 spl_autoload と spl_autoload_call があり、autoload_func をこれら 2 つの異なる関数アドレスに指定することで、異なる自動ロード メカニズムが実装されます。

classLOAD
{
 staticfunctionloadClass($class_name)
  {
    $filename= $class_name.".class.php";
 $path= "include/".$filename
    if(is_file($path)) returninclude$path;
  }
}
/**
 * 设置对象的自动载入
 * spl_autoload_register — Register given function as __autoload() implementation
 */
spl_autoload_register(array(&#39;LOAD&#39;, &#39;loadClass&#39;));
/**
*__autoload 方法在 spl_autoload_register 后会失效,因为 autoload_func 函数指针已指向 spl_autoload 方法
* 可以通过下面的方法来把 _autoload 方法加入 autoload_functions list
*/
spl_autoload_register( &#39;__autoload&#39;);
ログイン後にコピー

spl_autoload_register を使用してクラスメソッドと __autoload 関数を同時に登録する場合、登録順序に従って、最初に登録されたメソッドまたは関数でクラスファイルがロードされると、2 番目のメソッドまたは関数は実行されません。登録されたクラスのメソッドまたは関数。それ以外の場合は、2 番目に登録されたクラスのメソッドまたは関数が実行されます。

<?php
class autoloader {
  public static $loader;
  public static function init() {
    if (self::$loader == NULL)
      self::$loader = new self ();
    return self::$loader;
  }
  public function __construct() {
    spl_autoload_register ( array ($this, &#39;model&#39; ) );
    spl_autoload_register ( array ($this, &#39;helper&#39; ) );
    spl_autoload_register ( array ($this, &#39;controller&#39; ) );
    spl_autoload_register ( array ($this, &#39;library&#39; ) );
  }
  public function library($class) {
    set_include_path ( get_include_path () . PATH_SEPARATOR . &#39;/lib/&#39; );
    spl_autoload_extensions ( &#39;.library.php&#39; );
    spl_autoload ( $class );
  }
  public function controller($class) {
    $class = preg_replace ( &#39;/_controller$/ui&#39;, &#39;&#39;, $class );
    set_include_path ( get_include_path () . PATH_SEPARATOR . &#39;/controller/&#39; );
    spl_autoload_extensions ( &#39;.controller.php&#39; );
    spl_autoload ( $class );
  }
  public function model($class) {
    $class = preg_replace ( &#39;/_model$/ui&#39;, &#39;&#39;, $class );
    set_include_path ( get_include_path () . PATH_SEPARATOR . &#39;/model/&#39; );
    spl_autoload_extensions ( &#39;.model.php&#39; );
    spl_autoload ( $class );
  }
  public function helper($class) {
    $class = preg_replace ( &#39;/_helper$/ui&#39;, &#39;&#39;, $class );
    set_include_path ( get_include_path () . PATH_SEPARATOR . &#39;/helper/&#39; );
    spl_autoload_extensions ( &#39;.helper.php&#39; );
    spl_autoload ( $class );
  }
}
//call
autoloader::init ();
?>
ログイン後にコピー

要約: 以上がこの記事の全内容です。皆さんの学習に役立つことを願っています。

おすすめ関連記事:

1

.
PHPオートロードメカニズムの紹介 - spl_autoload_register()関数、PHPクラスの自動ロード
2.spl_autoload_registerを使用して自動ロードの例を実装する方法の詳細な説明
関連ビデオの推奨: 1. Dugu Jiu 格安(4)_PHP ビデオチュートリアル

以上がPHPのspl_autoload_register()関数の使い方の詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!