ホームページ バックエンド開発 PHPチュートリアル PHP の autoLoad 自動読み込み機構について話しましょう_PHP チュートリアル

PHP の autoLoad 自動読み込み機構について話しましょう_PHP チュートリアル

Jul 21, 2016 pm 03:15 PM
autoload php 説明書 負荷 ほとんど 機構 使用 自動 それについて話します

__autoload の使用方法 1:
最もよく使用される方法は、クラス名に基づいてクラス ファイルを見つけて、require_one

コードをコピーする コードは次のとおりです:

function __autoload ($class_name) {
$path = str_replace('_', '/', $class_name);
require_once $path .
}
// Http/File/Interface.php ファイルが自動的に作成されます。ここにロードされます
$a = new Http_File_Interface();

このメソッドの利点は、シンプルで使いやすいことです。もちろん、欠点もあります。欠点は、ファイル構造を変更するときにクラス名とファイル パスを強制的に変更する必要があることです。

__autoloadの利用方法2(ダイレクトマッピング方式)
コードをコピー コードは以下の通りです:

$map = array(
'Http_File_Interface' => 'C:/PHP/HTTP /FILE/ Interface.php'
);
function __autoload($class_name) {
if (isset($map[$class_name])) {
require_once $map[$class_name]
}
}
// C はここに自動的にロードされます:/PHP/HTTP/FILE/Interface.php ファイル
$a = new Http_File_Interface();


このメソッドの利点は、クラス名とファイル パスがマッピングによってのみ維持されることです。ファイル構造が変更された場合、クラス名を変更する必要はなく、マッピング内の対応する項目を変更するだけです。

前の方法と比較したこの方法の欠点は、ファイルが多すぎる場合にこのマッピングを維持するのが非常に面倒なことです。おそらく、現時点では、メンテナンスのために json または別のファイルを使用することを検討するでしょう。おそらく、そのようなマッピングを維持または作成するためにフレームワークを使用することを考えるでしょう。

spl_autoload

__autoload の最大の欠点は、複数の autoload メソッドを持てないことです

さて、次のシナリオを考えてください。あなたのプロジェクトには __autoload があり、他の誰かがいます。プロジェクトには __autoload も含まれているため、2 つの __autoload が競合します。解決策は __autoload を変更して 1 になるようにすることですが、これは間違いなく非常に面倒です。

そのため、spl の autoload シリーズ関数が表示されるように、autoload 呼び出しスタックを緊急に使用する必要があります。 spl_autoload_register を使用して複数のカスタム オートロード関数を登録できます

PHP バージョンが 5.1 以降の場合は、spl_autoload を使用できます

まず spl のいくつかの関数を理解します:
PHP の autoLoad 自動読み込み機構について話しましょう_PHP チュートリアル

spl_autoload は _autoload() 実装のデフォルトです。 include_path
Spl_autoload で $class_name(.php/.inc) を探して自動読み込みを実装します:
コードをコピー コードは次のとおりです:

/*http.php*/
class http
{
public function callname(){
echo "これは http";
}
}
/*test.php*/
set_include_path("/home/yejianfeng/handcode/"); //ここでパスを include
spl_autoload("http"); ///home/yejianfeng/handcode/http.php を探します
$a = new http(); );


Spl_autoload_register

SPL __autoload 関数スタックに関数を登録します。例を直接見てください:

コードをコピーします コードは次のとおりです:
/*http.php*/
class http
{
public function callname(){
echo "これは http";
}
}

/*test.php*/
spl_autoload_register(function($class ){
if($class = = 'http'){
require_once("/home/yejianfeng/handcode/http.php")
}
}); ->callname();



spl_autoload_call
spl_autoload_register に登録されている呼び出し関数を呼び出します。以下の例を参照してください



コードをコピーします
コードは次のとおりです: /*http.php* / class http
{
public function callname(){
echo "これは http";
}
}
/*http2.php*/
class http
{
public function callname(){
echo "これは http2" ;
}
}

/*test.php*/
spl_autoload_register(function($class){
if($class == 'http' ){
require_once("/home/yejianfeng/handcode /http.php");
}
if($class == 'http2'){
require_once("/home/yejianfeng/handcode/http2.php");
}
});
spl_auto_call('http2' );
$a = new http(); //このとき、「this is http2」が出力されます


spl_auto_register この関数を使用すると、__autoload を使用せずに自動ロード用のカスタム関数を使用できるようになります。この方法は現在では一般的に使用されています。
Zend の AutoLoader モジュールはこのメソッドを使用します。対応するコードを抜粋します
コードをコピーします コードは次のとおりです:

spl_autoload_register(array(__CLASS__, 'autoload'));

public static function autoload($class)
{
…..

}


おすすめ参考記事:
zendのオートロード機構については、以前の記事 http://www.jb51.net/article/31399.htm に詳細な分析があります。
autoload の自動読み込みの仕組みについては、こちらの記事 http://www.jb51.net/article/31279.htm で最下層から詳しく説明されています。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/326121.html技術記事 __autoload の使用方法 1: このメソッドは、クラス名に基づいてクラス ファイルを検索し、コードを次のようにコピーします: function __autoload($class_name)...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

CakePHP プロジェクトの構成 CakePHP プロジェクトの構成 Sep 10, 2024 pm 05:25 PM

この章では、CakePHP の環境変数、一般設定、データベース設定、電子メール設定について理解します。

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

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

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

この章では、ルーティングに関連する次のトピックを学習します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

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

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

See all articles