PHP 名前空間解決ルール

Jul 29, 2016 am 09:12 AM
namespace new

PHP 名前空間解決ルール

名前空間名の定義

非修飾名未修飾名

<code>名称中不包含命名空间分隔符的标识符,例如Foo
</code>
ログイン後にコピー

修飾名修飾名

<code>名称中含有命名空间分隔符的标识符,例如:Foo\Bar
</code>
ログイン後にコピー

完全修飾名

<code>名称中包含命名空间分隔符,并以命名空间分隔符开始的标识符,例如:\Foo\Bar.
namespace\Foo 也是一个完全限定名称。
</code>
ログイン後にコピー

名前解決は次の規則に従います

  1. 関数、クラス、定数の完全修飾名の場合in 呼び出しはコンパイル時に解決されます。たとえば、新しい AB はクラス AB に解決されます。
  2. すべての非修飾名と修飾名 (非完全修飾名) は、現在のインポート ルールに従ってコンパイル時に変換されます。たとえば、名前空間 ABC が C としてインポートされる場合、CDe() の呼び出しは ABCDe() に変換されます。
  3. 名前空間内では、インポート ルールに従って変換されないすべての修飾名の前に現在の名前空間名が付きます。たとえば、CDe() が名前空間 AB 内で呼び出された場合、CDe() は ABCDe() に変換されます。
  4. 修飾されていないクラス名は、現在のインポート ルールに従ってコンパイル時に変換されます (短いインポート名の代わりに完全な名前が使用されます)。たとえば、ネームスペース ABC が C としてインポートされる場合、新しい C() は新しい ABC() に変換されます。
  5. 名前空間 (AB など) 内では、修飾されていない名前への関数呼び出しは実行時に解決されます。たとえば、関数 foo() への呼び出しは次のように解析されます:
    1. 現在の名前空間で ABfoo() という名前の関数を見つけます
    2. グローバル空間で関数 foo() を見つけて呼び出してみます。
  6. 名前空間 (AB など) 内の非修飾名または修飾名クラス (非完全修飾名) への呼び出しは、実行時に解決されます。以下は、new C() と new DE() を呼び出す解析プロセスです:

    new C() の解析:

    1. 現在の名前空間でクラス ABC を検索します。

    2. クラス ABC を自動的にロードしてみます。

    新しい DE() 分析:

    1. クラス名の前に現在の名前空間名を追加して ABDE となり、クラスを見つけます

    2. クラス ABDE を自動的にロードしてみます。

    グローバル名前空間内のグローバル クラスを参照するには、完全修飾名 new C() を使用する必要があります。

名前解決の例

<code><?php
namespace A;
use B\D, C\E as F;

// 函数调用

foo();      // 首先尝试调用定义在命名空间"A"中的函数foo()
            // 再尝试调用全局函数 "foo"

\foo();     // 调用全局空间函数 "foo" 

my\foo();   // 调用定义在命名空间"A\my"中函数 "foo" 

F();        // 首先尝试调用定义在命名空间"A"中的函数 "F" 
            // 再尝试调用全局函数 "F"

// 类引用

new B();    // 创建命名空间 "A" 中定义的类 "B" 的一个对象
            // 如果未找到,则尝试自动装载类 "A\B"

new D();    // 使用导入规则,创建命名空间 "B" 中定义的类 "D" 的一个对象
            // 如果未找到,则尝试自动装载类 "B\D"

new F();    // 使用导入规则,创建命名空间 "C" 中定义的类 "E" 的一个对象
            // 如果未找到,则尝试自动装载类 "C\E"

new \B();   // 创建定义在全局空间中的类 "B" 的一个对象
            // 如果未发现,则尝试自动装载类 "B"

new \D();   // 创建定义在全局空间中的类 "D" 的一个对象
            // 如果未发现,则尝试自动装载类 "D"

new \F();   // 创建定义在全局空间中的类 "F" 的一个对象
            // 如果未发现,则尝试自动装载类 "F"

// 调用另一个命名空间中的<strong>静态方法</strong>或命名空间函数

B\foo();    // 调用命名空间 "A\B" 中函数 "foo"

B::foo();   // 调用命名空间 "A" 中定义的类 "B" 的 "foo" 方法
            // 如果未找到类 "A\B" ,则尝试自动装载类 "A\B"

D::foo();   // 使用导入规则,调用命名空间 "B" 中定义的类 "D" 的 "foo" 方法
            // 如果类 "B\D" 未找到,则尝试自动装载类 "B\D"

\B\foo();   // 调用命名空间 "B" 中的函数 "foo" 

\B::foo();  // 调用全局空间中的类 "B" 的 "foo" 方法
            // 如果类 "B" 未找到,则尝试自动装载类 "B"

// 当前命名空间中的<strong>静态方法</strong>或函数

A\B::foo();   // 调用命名空间 "A\A" 中定义的类 "B" 的 "foo" 方法
              // 如果类 "A\A\B" 未找到,则尝试自动装载类 "A\A\B"

\A\B::foo();  // 调用命名空间 "A\B" 中定义的类 "B" 的 "foo" 方法
              // 如果类 "A\B" 未找到,则尝试自动装载类 "A\B"
?>
</code>
ログイン後にコピー
').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i ').text(i)); }; $numbering.fadeIn(1700); }); });

上記では、静的メソッドを含む PHP 名前空間解析ルールを紹介しました。PHP チュートリアルに興味のある友人に役立つことを願っています。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

PHP8.0での名前空間のマージ PHP8.0での名前空間のマージ May 14, 2023 am 08:43 AM

テクノロジーの継続的な発展に伴い、PHP 言語は常に更新され、改善されています。 PHP 言語の最新バージョンである PHP8.0 は、以前のバージョンよりも強力であり、その重要な機能の 1 つは名前空間のマージです。では、名前空間のマージとは何でしょうか?それは何の役に立つのですか?これについては以下で詳しく説明します。ネームスペースは、異なるコードを区別するために使用される PHP のネームスペースで、コード内で同じ名前のクラス、関数、定数を使用できるようになります。以前のバージョンでは

付箋の名前空間を削除する方法 付箋の名前空間を削除する方法 Dec 27, 2023 pm 01:51 PM

win7システムを使用すると、付箋ツールが見つかります。 Stickynotes は実際には電子メモ帳のような機能を持ちますが、単語を削除したい場合は、コントロール パネルでアンインストールする必要があります。 StickyNotes の名前空間とは何ですか? 削除する方法 方法 1: 検索する - 方法 2: 見つけて後で削除をクリックする 方法 3: サードパーティのソフトウェアを使用して破棄して削除する StickyNotes とは何ですか? 付属の付箋ツールです。付箋のようなシステムで、デスクトップ上に浮かせて、重要なことを書き留めておくのに便利です。通常、ソフトウェアは非表示の状態にありますが、必要に応じて指定した時間に飛び出してユーザーに通知することができます。

Go言語のmakeとnewの違いは何ですか Go言語のmakeとnewの違いは何ですか Jan 09, 2023 am 11:44 AM

相違点: 1. Make は、slice、map、および chan タイプのデータの割り当てと初期化にのみ使用できますが、new は任意のタイプのデータを割り当てることができます。 2. 新しい割り当ては型「*Type」であるポインタを返しますが、make は参照である Type を返します。 3. new によって割り当てられたスペースはクリアされ、make によってスペースが割り当てられた後、初期化されます。

Javaで新しいキーワードを使用する方法 Javaで新しいキーワードを使用する方法 May 03, 2023 pm 10:16 PM

1. 概念 Java 言語では、「new」式はインスタンスを作成する役割を果たし、その中でコンストラクターが呼び出されてインスタンスを初期化します。コンストラクター自体の戻り値の型は void であり、「コンストラクターは新しく作成された値を返す」ではありません。オブジェクト参照」ですが、新しい式の値は新しく作成されたオブジェクトへの参照です。 2. 目的: 新しいクラスのオブジェクトを作成する 3. 動作メカニズム: オブジェクトのメンバーにメモリ領域を割り当て、デフォルト値を指定する メンバー変数を明示的に初期化し、構築メソッドの計算を実行し、参照値を返す 4. 新しい操作を頻繁にインスタンス化するメモリ内に新しいメモリを開くことを意味し、メモリ内のヒープ領域にメモリ空間が確保され、jvmによって制御され、メモリが自動的に管理されます。ここでは例として String クラスを使用します。プ

PHP7 の NameSpace とキーワードを使用してコードの構造を整理するにはどうすればよいですか? PHP7 の NameSpace とキーワードを使用してコードの構造を整理するにはどうすればよいですか? Oct 19, 2023 am 08:07 AM

PHP7 の NameSpace とキーワードを使用してコードの構造を整理するにはどうすればよいですか?はじめに: ソフトウェア開発において、コードの組織構造は非常に重要であり、コードの可読性、保守性、拡張性と直接関係しています。 PHP バージョンの継続的な反復により、PHP7 では、より高い柔軟性と利便性を提供する NameSpace キーワードと Use キーワードが導入されました。この記事では、PHP7 の NameSpace と Use キーワードを使用してコードの構造を整理し、具体的なコードを提供する方法を紹介します。

新しい演算子は js でどのように機能しますか? 新しい演算子は js でどのように機能しますか? Feb 19, 2024 am 11:17 AM

js の new 演算子はどのように機能しますか? 特定のコード例が必要です。js の new 演算子は、オブジェクトの作成に使用されるキーワードです。その機能は、指定されたコンストラクターに基づいて新しいインスタンス オブジェクトを作成し、そのオブジェクトへの参照を返すことです。 new 演算子を使用する場合、実際には次の手順が実行されます: 新しい空のオブジェクトを作成する; 空のオブジェクトのプロトタイプをコンストラクターのプロトタイプ オブジェクトにポイントする; コンストラクターのスコープを新しいオブジェクトに割り当てる (したがって、これは new をポイントします) object); コンストラクターでコードを実行し、新しいオブジェクトを与えます

新しい富士フイルムの固定レンズGFXカメラが新しい中判センサーをデビューさせ、全く新しいシリーズを開始する可能性がある 新しい富士フイルムの固定レンズGFXカメラが新しい中判センサーをデビューさせ、全く新しいシリーズを開始する可能性がある Sep 27, 2024 am 06:03 AM

富士フイルムは近年、フィルムシミュレーションとソーシャルメディアでのコンパクトレンジフィンガースタイルカメラの人気のおかげで多くの成功を収めている。しかし、Fujirumors によると、その栄誉に満足しているわけではないようだ。あなたは

See all articles