PHPのクラス自動読み込みの仕組み_PHPチュートリアル
PHP の開発プロセスで、外部からクラスを導入する場合は、通常、include メソッドと require メソッドを使用して、クラスを定義するファイルをインクルードします。小規模に開発する場合には大きな問題はありません。ただし、大規模な開発プロジェクトでは、これを行うと大量の require または include メソッド呼び出しが生成され、効率が低下するだけでなく、コードの保守が困難になり、require_once のコストが非常に高くなります。
PHP5 より前は、各 PHP フレームワークがクラスの自動ロードを実装したい場合、通常、ディレクトリを横断し、特定の取り決めに従って合意されたルールに準拠するすべてのファイルを自動的にロードするクラスまたは関数を実装していました。 もちろん、PHP5 より前のオブジェクト指向のサポートはあまり良くなく、クラスの使用は現在ほど頻繁ではありませんでした。 PHP5 以降では、PHP クラスをロードするときに、クラスが配置されているファイルが含まれていない場合、またはクラス名が間違っている場合、Zend エンジンは自動的に __autoload 関数を呼び出します。この関数を使用するには、ユーザーが自分で __autoload 関数を実装する必要があります。 PHP5.1.2以降では、spl_autoload_register関数を使用して自動ロード処理機能をカスタマイズできるようになりました。この関数が呼び出されない場合、SPL のカスタム spl_autoload 関数がデフォルトで使用されます。
1. __自動ロードの例:
関数 __autoload($class_name) {
echo '__autload class:', $class_name, '
';
}
新しいデモ();
上記のコードは最後に __autload class:Demo を出力します。
その後、エラー メッセージが表示されます: 致命的なエラー: クラス「デモ」が見つかりません
通常、次のように _autoload を使用してクラスを自動的にロードします。
関数 __autoload($class_name) {
require_once ($class_name . “class.php”);
}
$memo= 新しいデモ
;
_autoload は少なくとも 3 つのことを行う必要があることがわかります。1 つ目は、クラス名に基づいてクラス ファイル名を決定することです。2 つ目は、クラス ファイルが配置されているディスク パスを決定することです (この例では、最も単純なケースでは、クラスを呼び出す PHP プログラム ファイルと同じフォルダーにあります)。3 番目の方法は、クラスをディスク ファイルからシステムにロードすることです。 3 番目のステップは最も単純で、include/require を使用するだけです。第 1 ステップと第 2 ステップの機能を実現するには、クラス名とディスク ファイル間のマッピング方法を開発時に合意する必要があります。この方法でのみ、クラス名に基づいて対応するディスク ファイルを見つけることができます。
したがって、含めるクラス ファイルが多数ある場合は、対応するルールを決定し、__autoload() 関数でクラス名と実際のディスク ファイルを一致させるだけで、遅延読み込み効果を実現できます。ここから、 __autoload() 関数の実装で最も重要なことは、クラス名と実際のディスク ファイルの間のマッピング ルールの実装であることもわかります。
2. spl_autoload_register() 関数
この関数の機能は、関数を SPL の __autoload 関数スタックに登録し、システムのデフォルトの __autoload() 関数を削除することです。これは以下の例で見ることができます:
function __autoload($class_name) {
echo '__autload class:', $class_name, ''; }
関数 classLoader($class_name) {
echo 'SPL ロード クラス:', $class_name, '
';
}
spl_autoload_register('クラスローダー');
new Test();//結果:SPL ロード クラス:Test
構文: bool spl_autoload_register ([callback $autoload_function]) 2 つのパラメータを受け入れます。1 つはオートロード スタックに追加される関数で、もう 1 つはローダーがこのクラスを見つけられない場合に例外をスローするかどうかを示すフラグです。最初の引数はオプションで、デフォルトでは spl_autoload() 関数を指します。この関数は、小文字のクラス名と .php 拡張子または .ini 拡張子、あるいは spl_autoload_extensions( ) という名前のファイル。
クラス CalssLoader
{
パブリック静的関数ローダー($classname)
$class_file = strto lower($classname).".php";
If (file_exists($class_file)){
require_once($class_file);
}
//メソッドは静的メソッドです
spl_autoload_register('CalssLoader::loader');
$test = 新しいテスト();
spl_autoload_register() 関数が呼び出されると、未定義のクラスが呼び出されるとき、システムは __autoload() 関数を自動的に呼び出すのではなく、spl_autoload_register() 関数に登録されているすべての関数を順番に呼び出します。この状況を回避したい場合は、 spl_autoload_register() 関数のより安全な初期化呼び出しメソッドを使用する必要があります:
if(false === spl_autoload_functions()){
If(function_exists('__autoload')){
spl_autoload_registe('__autoload',false);
}
spl_autoload_functions() 関数は、登録された関数の配列を返します。SPL 自動ロード スタックが初期化されていない場合は、ブール値 false を返します。次に、__autoload() という名前の関数が存在するかどうかを確認します。存在する場合は、それを自動ロード スタックの最初の関数として登録し、その機能を保持できます。その後、引き続きオートロード機能を登録できます。
次に、 spl_autoload_call('className') 関数を呼び出すことで、そのクラスを使用せずにローダーを手動で呼び出すことができます。この関数を class_exists('className',false) と組み合わせて使用すると、クラスのロードを試行し、すべてのオートローダーがクラスを見つけられない場合は失敗します。
f(spl_autoload_call('className') && class_exists('className',false)){
} else {
(ネットワークコンテンツの概要)
Programming Life、guisuコラムより抜粋
http://www.bkjia.com/PHPjc/478291.html
www.bkjia.com
true

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。
