ホームページ >バックエンド開発 >PHPの問題 >PHPの名前空間の使い方の詳しい説明

PHPの名前空間の使い方の詳しい説明

PHPz
PHPzオリジナル
2020-09-25 14:24:512793ブラウズ

php 名​​前空間は名前空間を指します。使用方法: まず PHP サンプル ファイルを作成し、次に「namespace MyProject;」を通じて「MyProject」名前空間にコードを定義します。

PHPの名前空間の使い方の詳しい説明

PHP 名前空間 (名前空間)

PHP 名前空間 (名前空間) は PHP 5.3 で追加されました。C# と Java を学習している場合は、名前空間は次のとおりです。何も新しいことはありません。ただし、PHP では依然として非常に重要な意味を持っています。

PHP 名前空間は、次の 2 種類の問題を解決できます。

ユーザー作成コードと、PHP 内部クラス/関数/定数またはサードパーティのクラス/関数/定数の間の名前の競合。

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

名前空間の定義

デフォルトでは、PHP が名前空間をサポートする前と同様に、すべての定数、クラス、関数名はグローバル空間に配置されます。

名前空間はキーワード名前空間を通じて宣言されます。ファイルに名前空間が含まれている場合は、他のすべてのコードの前に名前空間を宣言する必要があります。構文形式は次のとおりです;

<?php  
// 定义代码在 &#39;MyProject&#39; 命名空间中  
namespace MyProject;  
  
// ... 代码 ...

次のように、同じファイル内で異なる名前空間コードを定義することもできます:

<?php  
namespace MyProject;
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */  }
namespace AnotherProject;
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */  }
?>

この構文を使用して 1 つのファイル内に複数の名前空間を定義することはお勧めできません。単一のファイルです。次の中括弧形式の構文を使用することをお勧めします。

<?php
namespace MyProject {
    const CONNECT_OK = 1;
    class Connection { /* ... */ }
    function connect() { /* ... */  }
}
namespace AnotherProject {
    const CONNECT_OK = 1;
    class Connection { /* ... */ }
    function connect() { /* ... */  }
}
?>

グローバル非名前空間のコードを名前空間のコードと組み合わせるには、中括弧の形式でのみ構文を使用できます。グローバル コードは、名前のない名前空間ステートメントとともに中括弧で囲む必要があります。例:

<?php
namespace MyProject {
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */  }
}
namespace { // 全局代码
session_start();
$a = MyProject\connect();
echo MyProject\Connection::start();
}
?>

名前空間を宣言する前の唯一の有効なコードは、ソース ファイルのエンコード方法を定義する宣言ステートメントです。空白を含むすべての非 PHP コードは、名前空間宣言の前に現れてはなりません。

<?php
declare(encoding=&#39;UTF-8&#39;); //定义多个命名空间和不包含在命名空间中的代码
namespace MyProject {
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */  }
}
namespace { // 全局代码
session_start();
$a = MyProject\connect();
echo MyProject\Connection::start();
}
?>

次のコードは構文エラーを引き起こします:

<html>
<?php
namespace MyProject; // 命名空间前出现了“<html>” 会致命错误 - 命名空间必须是程序脚本的第一条语句
?>

サブネームスペース

ディレクトリとファイルの関係と同様に、PHP ネームスペースでも階層ネームスペースを指定できます。 。したがって、ネームスペース名は階層的な方法で定義できます。

<?php
namespace MyProject\Sub\Level;  //声明分层次的单个命名空间
const CONNECT_OK = 1;
class Connection { /* ... */ }
function Connect() { /* ... */  }
?>

上の例では、定数 MyProject\Sub\Level\CONNECT_OK、クラス MyProject\Sub\Level\Connection、および関数 MyProject\Sub\Level を作成します。 \接続する。

名前空間の使用法

PHP 名前空間のクラス名は、次の 3 つの方法で参照できます。

非修飾名、または $a = などのプレフィックスを含まないクラス名new foo(); または foo::staticmethod();。現在の名前空間が currentnamespace の場合、foo は currentnamespace\foo に解決されます。 foo を使用するコードがグローバルであり、どの名前空間にもコードが含まれていない場合、foo は foo として解決されます。警告: ネームスペース内の関数または定数が未定義の場合、修飾されていない関数または定数名はグローバル関数または定数名に解決されます。

修飾名、または $a = new subnamespace\foo(); や subnamespace\foo::staticmethod(); などのプレフィックスを含む名前。現在の名前空間が currentnamespace の場合、foo は currentnamespace\subnamespace\foo に解決されます。 foo を使用するコードがグローバルであり、コードがどの名前空間にも含まれていない場合、foo は subnamespace\foo に解決されます。

完全修飾名、またはグローバル接頭辞演算子を含む名前 ($a = new \currentnamespace\foo(); または \currentnamespace\foo::staticmethod(); など。この場合、foo はコード内で常にリテラル名 currentnamespace\foo に解決されます。

以上がPHPの名前空間の使い方の詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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