PHP 5.3およびPHP 6のネームスペース

名前空間(名前空間/パッケージ)は、javaおよびc#プログラマーになじみがあり、phpで使用できるようになりました。 Zend、PEAR、および互換性のための他のライブラリとプラットフォームで現在行われているように、クラス名に長いプレフィックスを書き込まないようにする必要があります。
代わりに、クラス、関数、インターフェイス(抽象クラ​​ス)、および定数を1つの名前空間に結合できます。 グローバル変数はこのスペースに含まれていません。

簡単な例


名前空間キーワードで定義されたスペース
//
namespace MyCMS::Core;
class System{}

3番目のライブラリでこのクラスを使用するには、useキーワードを使用します。
require_once('mycms/core.php');
use MyCMS::Core::System; //
$objSystem=new System;


ご想像のとおり、::セパレータは静的メソッドの呼び出しと同じように機能し、名前空間のレベルと具象クラスを分離します。 ネストレベルのスペースは、ライブラリのモジュール性とともに使用して、たとえば、スペースデータベース:: MySQL ::アダプターおよびデータベース:: Oracle ::アダプターを実装できます。

新機能と新しい課題


名前空間でクラス名が以前に宣言されたグローバルクラスまたは関数を上書きする場合、:: SomeClassNameを介してアクセスできますが、プログラマがアクセスする実装を知らないと問題が発生する可能性があります。 たとえば、標準のphp関数を再宣言し、場所でsin()とcos()を入れ替えて、誰かの人生が蜜のように見えないようにすることができます。
デバッグ用に、作業定数__NAMESPACE__があります。
コロンを使用すると、あいまいさの問題も発生します。
A::B() // B namespace A
A::B() // B A

トピックを読む:


オリジナル


Source: https://habr.com/ru/post/J27791/


All Articles