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

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

Oct 14, 2019 pm 06:10 PM
親切 オートロード

* 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 サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHP の命名規則: クラス、メソッド、変数にキャメルケースの命名を使用する方法 PHP の命名規則: クラス、メソッド、変数にキャメルケースの命名を使用する方法 Jul 30, 2023 pm 02:43 PM

PHP の命名規則: キャメルケース表記を使用してクラス、メソッド、変数に名前を付ける方法 PHP プログラミングでは、適切な命名規則は重要なコーディング方法です。コードの可読性と保守性が向上し、チームワークがよりスムーズになります。この記事では、一般的な命名規則であるキャメルケースについて説明し、PHP でそれを使用してクラス、メソッド、変数に名前を付ける方法の例をいくつか示します。 1. キャメルケースの命名法とは何ですか?キャメルケースは、各単語の最初の文字を大文字にする一般的な命名規則です。

PHP エラー: クラスを繰り返し宣言できません。解決しました。 PHP エラー: クラスを繰り返し宣言できません。解決しました。 Aug 25, 2023 pm 04:13 PM

PHP エラー: クラスを繰り返し宣言できません。解決しました。開発者が問題に遭遇するのはよくあることです。 PHP 開発では、クラスを繰り返し宣言できないというよくあるエラーに遭遇することがよくあります。この問題は簡単そうに見えますが、時間内に解決しないとコードが正しく実行されません。この記事では、この問題の原因と解決策を紹介しますので、ご参考ください。 PHPコードでクラスを定義する際、同じファイルまたは複数のファイルに同じクラスを複数回定義するとクラスを繰り返し宣言できないエラーが発生します。これは

PHP のパッケージング技術とアプリケーション PHP のパッケージング技術とアプリケーション Oct 12, 2023 pm 01:43 PM

PHP のカプセル化テクノロジとアプリケーションのカプセル化は、オブジェクト指向プログラミングにおける重要な概念であり、外部プログラムに統一されたアクセス インターフェイスを提供するために、データとデータに対する操作を一緒にカプセル化することを指します。 PHP では、アクセス制御修飾子とクラス定義を通じてカプセル化を実現できます。この記事では、PHP のカプセル化テクノロジとそのアプリケーション シナリオを紹介し、いくつかの具体的なコード例を示します。 1. カプセル化されたアクセス制御修飾子 PHP では、カプセル化は主にアクセス制御修飾子によって実現されます。 PHP には 3 つのアクセス制御修飾子が用意されています。

「PHP によるオブジェクト指向プログラミング入門: 概念から実践まで」 「PHP によるオブジェクト指向プログラミング入門: 概念から実践まで」 Feb 25, 2024 pm 09:04 PM

オブジェクト指向プログラミングとは何ですか?オブジェクト指向プログラミング (OOP) は、現実世界のエンティティをクラスに抽象化し、オブジェクトを使用してこれらのエンティティを表すプログラミング パラダイムです。クラスはオブジェクトのプロパティと動作を定義し、オブジェクトはクラスをインスタンス化します。 OOP の主な利点は、コードの理解、保守、再利用が容易になることです。 OOP の基本概念 OOP の主な概念には、クラス、オブジェクト、プロパティ、メソッドが含まれます。クラスはオブジェクトの設計図であり、オブジェクトのプロパティと動作を定義します。オブジェクトはクラスのインスタンスであり、クラスのすべてのプロパティと動作を備えています。プロパティは、データを保存できるオブジェクトの特性です。メソッドは、オブジェクトのデータを操作できるオブジェクトの関数です。 OOP の利点 OOP の主な利点は次のとおりです。 再利用性: OOP はコードをより高度なものにすることができます。

Java でクラスが見つかりません - java.lang.ClassNotFoundException を解決するにはどうすればよいですか? Java でクラスが見つかりません - java.lang.ClassNotFoundException を解決するにはどうすればよいですか? Jun 25, 2023 am 10:37 AM

Java 開発プロセス中に、java.lang.ClassNotFoundException というエラーが発生することがあります。必要なクラス ファイルが Java 仮想マシン (JVM) に見つからないと表示されます。このエラーによりプログラムが適切に実行されなくなり、時間内に解決しないと開発の進行が遅れます。この記事では、Javaに存在しないクラスの原因と解決策を紹介します。 1. 理由 1. クラスパスが間違っている Java では、パッケージパスとクラスパスが非常に重要です。クラスパスが正しく設定されていない場合、またはクラスファイルが正しく設定されていない場合

PHPのオートローディング機構 PHPのオートローディング機構 Jun 18, 2023 pm 01:11 PM

PHP 言語の人気が高まるにつれて、開発者はより多くのクラスや関数を使用する必要があります。プロジェクトのサイズが大きくなると、すべての依存関係を手動で導入するのは現実的ではなくなります。現時点では、コードの開発とメンテナンスのプロセスを簡素化するために、自動読み込みメカニズムが必要です。自動ロード メカニズムは、実行時に必要なクラスとインターフェイスを自動的にロードし、手動によるクラス ファイルの導入を減らすことができる PHP 言語の機能です。このようにして、プログラマーはコードの開発に集中でき、面倒な手動のクラス導入によって引き起こされるエラーや時間の無駄を減らすことができます。 PHPでは一般的に、

PHP8 で属性を使用してクラスにカスタム アノテーションを追加するにはどうすればよいですか? PHP8 で属性を使用してクラスにカスタム アノテーションを追加するにはどうすればよいですか? Oct 18, 2023 am 10:16 AM

PHP8 で属性を使用してクラスにカスタム アノテーションを追加するにはどうすればよいですか?カスタム アノテーションは、クラスまたはメソッドにメタデータを追加する方法であり、実行時に特定のクラスまたはメソッドに関する追加情報を取得して処理するのに役立ちます。 PHP8 では、属性の概念が導入され、クラスにカスタム アノテーションを簡単に追加できるようになりました。この記事では、属性を使用して PHP8 のクラスにカスタム アノテーションを実装する方法を紹介し、具体的なコード例を示します。 PHP8では、

PHP コードのカプセル化のヒント: クラスとオブジェクトを使用して再利用可能なコード ブロックをカプセル化する方法 PHP コードのカプセル化のヒント: クラスとオブジェクトを使用して再利用可能なコード ブロックをカプセル化する方法 Jul 29, 2023 pm 11:19 PM

PHP コードのカプセル化スキル: クラスとオブジェクトを使用して再利用可能なコード ブロックをカプセル化する方法 要約: 開発中に、再利用が必要なコード ブロックに遭遇することがよくあります。コードの保守性と再利用性を向上させるために、クラスおよびオブジェクトのカプセル化手法を使用して、これらのコード ブロックをカプセル化できます。この記事では、クラスとオブジェクトを使用して再利用可能なコード ブロックをカプセル化する方法を説明し、いくつかの具体的なコード例を示します。クラスとオブジェクトを使用してカプセル化する利点: クラスとオブジェクトを使用してカプセル化すると、次の利点があります: 1.1 重複を減らすことでコードの保守性が向上します。

See all articles