ホームページ  >  記事  >  バックエンド開発  >  PHP カーネル名前空間のヒントの共有

PHP カーネル名前空間のヒントの共有

黄舟
黄舟オリジナル
2017-03-09 09:38:591333ブラウズ

Wikipedia では、名前空間の定義は次のとおりです。 名前空間 (英語: Namespace) は、識別子 のコンテキストを表します。

識別子は複数の名前空間で定義でき、異なる名前空間でのその意味は互いに独立しています。プログラミング言語では、名前空間はそのスコープ内の識別子を含む特別なスコープであり、それ自体が識別子によって表されるため、論理的に関連する一連の識別子が識別子によって表されます。 関数とクラスのスコープは、可視性、アクセシビリティ、オブジェクトの有効期間と密接に関係している暗黙的な名前空間と考えることができます。


名前空間は、物事をカプセル化する方法として見ることができ、また、この抽象的な概念は、多くの言語や組織形態で見られます。 PHP では、名前空間は、クラス ライブラリやアプリケーションを作成するときにクラスや関数などの再利用可能なコードを作成するときに発生する 2 種類の問題を解決するために使用されます:

1。 /関数/定数またはサードパーティのクラス/関数/定数。

2. ソースコードの読みやすさを向上させるために、非常に長い識別子名のエイリアス (または短い) 名を作成します (通常、最初のタイプの問題を軽減するために定義されます)。


PHP は、バージョン 5.3.0 以降の名前空間機能をサポートします。名前空間の定義と使用の例を見てみましょう:


<?php
namespace tipi;
class Exception {
    public static $var = &#39;think in php internal&#39;;
}
 
const E_ALL = "E_ALL IN Tipi";
 
function strlen(){
    echo &#39;strlen in tipi&#39;;
}
 
echo Exception::$var;
echo strlen(Exception::$var);

1. 例:



2. 名前空間の定義


3. 名前空間の使用

関数呼び出しを例に挙げます。関数を呼び出す必要がある場合、zend_do_begin_function_call 関数が呼び出されます。 この関数では、名前空間が使用されるときに関数名がチェックされ、呼び出される関数は zend_resolve_non_class_name です。 zend_resolve_non_class_name 関数では、型に基づいて判断が行われ、関連する結果が返されます。

1.完全修飾名関数: プログラムは最初の文字が "" であるかどうかに基づいてこの判断を行います。この場合、解析中に直接返されます。 たとえば、strlen で始まるグローバル呼び出し、または前に定義したtipiExceptionに類似した呼び出しなどです。

2.すべての非修飾名と修飾名 (非完全修飾名): 現在のインポート ルール プログラムに基づいてエイリアスであるかどうかを判断し、インポート中にエイリアスを格納する HashTable から対応する名前空間名を取得します。コンパイルを実行し、既存の関数名とマージします。 エイリアスの保存と生成については、次のコンテンツで説明します。

3.名前空間の内部: インポート ルールに従って変換されないすべての修飾名は、名前の前に現在の名前空間を持ちます。 。最後に、現在の名前空間にあるかどうかが判断され、最終的には名前空間をマージした関数名が返されます。

4. エイリアス/インポート

エイリアスを介して外部完全修飾名を参照またはインポートできるようにすることは、名前空間の重要な機能です。

これは、Unix のようなファイル システムで他のファイルまたはディレクトリへのシンボリック リンクを作成する方法に似ています。 PHP 名前空間のサポート エイリアスまたはインポートを使用するには、クラス名にエイリアスを使用する方法と、名前空間名にエイリアスを使用する方法の 2 つがあります。


以上がPHP カーネル名前空間のヒントの共有の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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