PHP の autoLoad 自動読み込み機構について話しましょう_PHP チュートリアル
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 のいくつかの関数を理解します:

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 に登録されている呼び出し関数を呼び出します。以下の例を参照してください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
コードをコピーします
コードは次のとおりです: /*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 で最下層から詳しく説明されています。
。
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 で最下層から詳しく説明されています。
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事
R.E.P.O.説明されたエネルギー結晶と彼らが何をするか(黄色のクリスタル)
2週間前
By 尊渡假赌尊渡假赌尊渡假赌
レポ:チームメイトを復活させる方法
1 か月前
By 尊渡假赌尊渡假赌尊渡假赌
ハローキティアイランドアドベンチャー:巨大な種を手に入れる方法
4週間前
By 尊渡假赌尊渡假赌尊渡假赌
スプリットフィクションを打ち負かすのにどれくらい時間がかかりますか?
3週間前
By DDD
R.E.P.O.ファイルの保存場所:それはどこにあり、それを保護する方法は?
3週間前
By DDD

ホットツール

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

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

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

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

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

ホットトピック
Gmailメールのログイン入り口はどこですか?
7343
9


Java チュートリアル
1627
14


CakePHP チュートリアル
1352
46


Laravel チュートリアル
1265
25


PHP チュートリアル
1210
29



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

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

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

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