ホームページ  >  記事  >  バックエンド開発  >  php名前空間の詳しい説明 learning_PHPチュートリアル

php名前空間の詳しい説明 learning_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:36:54717ブラウズ

1. 名前空間とは何ですか?
名前空間は、そのスコープ内の識別子を含む特別なスコープであり、それ自体が識別子です。ネームスペースをオペレーティング システムのディレクトリにマップできます。ネームスペースはディレクトリに相当し、ネームスペース内のクラス、関数、および定数はディレクトリ内のファイルに相当します。同じディレクトリ (名前空間) 内のファイル名を同じにすることはできませんが、同じ名前のファイルが異なるディレクトリに存在することは可能です。
2. 名前空間の使用の問題を解決するには、どのような問題が使用されますか?
PHP 内のクラスまたは付属のクラス ライブラリ内のクラスと同じ名前を持つクラスを定義するなど、名前の競合を解決します。コードの可読性を向上させるために、名前空間にはエイリアス機能があり、10 文字を超えるクラス名にエイリアスを付けることができるため、コードが短縮され、他のスペースとの名前の競合を心配する必要がなくなります。
3. 名前空間の影響を受けるコード。
3 つのカテゴリ: クラス、関数、定数。影響を受けたのは 3 人の兄弟だけですが、他の人はどうすればよいでしょうか?定数について言えば、PHP 5.3 以降では const キーワードを使用して定数を定義できます。5.3 より前では、名前空間は const キーワードに対してのみ有効でした。
4. 名前空間の定義方法

コードをコピーします コードは次のとおりです:
namespace MyProject;
const CONNECT_OK = 1;//php5.3の後
class Connection { /* ... */ }
function connect() { /* ... */ }
#例 2
namespace MyProjectSubLevel;
const CONNECT_OK = 1;//php5.3 以降
class Connection { /* ... */ }
function connect() { /* ... */ }

スペースを宣言するには、`namespace space name` を使用します。 同時に、namespace の前に、declare ステートメント以外の php ステートメントを含めることはできません。 PHP 以外のコード (スペースも含めない)。
エラーの形式は次のとおりです:

コードをコピーします コードは次のとおりです:
$a = 1;
namespace MyProject;
?>www.jb51.net
//Fatalエラー: 名前空間宣言ステートメントは、スクリプトの最初のステートメントである必要があります...

さらに、同じ名前空間を複数のファイルで定義できるため、フレームワークを整理するのに非常に役立ちます。つまり、同じ名前空間 MyProject で始まるファイルは、同じ名前空間です。したがって、ファイル間で同じクラス/関数/定数名が使用されないように注意してください。
もちろん、同じファイルで複数の名前空間を定義することもできますが、これはお勧めできません。 (同じファイルが複数の名前空間を定義していることを理解してください)
5. 名前空間の使用方法
名前空間の使用には 3 つの形式があります:
非修飾名 - 区切り文字を使用せずに、/ などのクラス/関数/定数名を直接使用します。 / Call MyObjectFoo();
foo(); // Call MyObjectFoo();
echo FOO; // 形式は非修飾名の場合と同じです。
コードをコピーします
コードは次のとおりです:


namespace MyObject; new SubFoo(); //Call MyObjectSubFoo();


セパレータで始まる完全修飾名、かなり オペレーティング システムの絶対アドレス。 new OtherNSFoo();


コードをコピーします コードは次のとおりです:
namespace MyObject; //MyObject 名前空間に関係なく、OtherNsFoo(); 。


ヒント: 関数と定数 (フォールバック グローバル関数/定数) には特別な場所があります。


コードをコピー コードは次のとおりです:
namespace MyObject;
funcname(); // MyObjectFuncname が存在する場合は MyObjectFuncname() を呼び出し、それ以外の場合は funcname() を呼び出します。 FOO; // 上記と同じ。

クラスのための特別な場所もあります。

コードをコピー コードは次のとおりです:
namespace MyObject;
new Foo() //*MyObjectFoo が存在する場合は、それを呼び出します。存在しない場合は、__autoload を呼び出します。 MyObjectFoo クラスをロードしてみます。
//グローバル スコープ内のクラスは自動的に呼び出されないことに注意してください。

前に述べたように、名前空間にはエイリアスを作成するという別の目的があります。
コードをコピー コードは次のとおりです:

namespace MyObject;
use OtherNSSub as Other;
use OtherNSSub2 //OtherNSSub2 as Sub2;
use /MyClass;
new Foo(); //MyObjectFoo();
new OtherFoo(); //OtherNSSubFoo();
new Sub2Foo(); //Call OtherNSSub2Foo();

6 . ダイナミックなネーミング 空間​​のダイナミックさは常に人々を混乱させますが、柔軟性ももたらします。名前空間では動的言語機能も使用できますが、名前空間への直接呼び出しはコンパイル時に解決されますが、動的機能はコンパイル時に解決されないことに注意してください。したがって、必ず接頭辞を追加してください。例:


コードをコピー コードは次のとおりです:
namespace MyObjectSub;
new Foo(); // コンパイル中に MyObjectSubFoo に解析された MyObjectSubFoo() を呼び出します
$a = 'Foo ';
new $a (); //MyObjectSubFoo() ではなく Foo() を呼び出します
$b = 'MyObjectSubFoo'; //MyObjectSubFoo と同等です
new $b(); //MyObjectSubFoo() を呼び出します
; $a = "MyObjectSub";


のように二重引用符を使用する必要があります。
付録 1: 同じファイル内で複数の名前空間を定義するには 2 つの方法があります:


コードをコピー

コードは次のとおりです:namespace MyProject;
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... * / }
名前空間 AnotherProject;
const CONNECT_OK = 1;
クラス Connection { /* ... */ }
function connect() { /* ... */ }



方法 1 は、実行中のアカウントを維持することです。


コードをコピー

コードは次のとおりです:namespace MyProject {
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... * / }
}
namespace AnotherProject {
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
}
namespace { //グローバル
const CONNECT_OK = 1 ;
クラス接続 { /* ... */ }
function connect() { /* ... */ }
}



方法 2、中括弧を使用して、中括弧内の同じ名前空間にコードを配置します。このメソッドでは、中括弧の外側に宣言以外のコードを含めることはできません。グローバル スコープ コードの場合は、スペース名を付けずに中括弧を使用します。

http://www.bkjia.com/PHPjc/736840.html

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/736840.html技術記事 1. 名前空間とは何ですか? ネームスペースは、そのスコープ内の識別子を含む特別なスコープであり、それ自体が識別子です。名前空間と操作を組み合わせることができます...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:MySQLデータベースを操作するためのPHPの基本クラスコード_PHPチュートリアル次の記事:MySQLデータベースを操作するためのPHPの基本クラスコード_PHPチュートリアル

関連記事

続きを見る