ホームページ >バックエンド開発 >PHPチュートリアル >これらのチュートリアルには含まれていない php3
php.net
(PHP 5 >= 5.3.0, PHP 7)
ネームスペースの定義
合法的な PHP コードはネームスペースに含めることができますが、ネームスペースの影響を受けるのは次のタイプのコードのみです。 (抽象クラスと特性を含む)、インターフェイス、関数、定数。
ファイルに名前空間が含まれている場合は、declare キーワードを除く他のすべてのコードの前に名前空間を宣言する必要があります。空白を含むすべての非 PHP コードは、名前空間宣言の前に現れてはなりません。
<html> <?phpnamespace MyProject; // 致命错误 - 命名空间必须是程序脚本的第一条语句 ?>
同じ名前空間を複数のファイルで定義することができ、同じ名前空間の内容を別のファイルに分割して保存することができます。
サブ名前空間を定義する
<?php namespace MyProject\Sub\Level; const CONNECT_OK = 1; class Connection { /* ... */ } function connect() { /* ... */ } ?>
同じファイル内で複数の名前空間を定義する
注: 実際のプログラミングの実践では、同じファイル内で複数の名前空間を定義することは強くお勧めできません。
<?php namespace MyProject { const CONNECT_OK = 1; class Connection { /* ... */ } function connect() { /* ... */ } }namespace AnotherProject {const CONNECT_OK = 1;class Connection { /* ... */ }function connect() { /* ... */ } }?>
名前空間の使用
クラス名を参照する 3 つの方法:
非修飾名 (名前に名前空間区切り文字が含まれていない識別子)、またはプレフィックスを含まないクラス名。たとえば、$a=new foo() または foo::staticmethod(); です。現在の名前空間が currentnamespace の場合、foo は currentnamespacefoo に解決されます。 foo を使用するコードがグローバルであり、どの名前空間にもコードが含まれていない場合、foo は foo として解決されます。 * *警告**: ネームスペース内の関数または定数が未定義の場合、修飾されていない関数または定数名はグローバル関数または定数名に解決されます。
修飾名 (名前に名前空間区切り文字を含む識別子)、または $a = new subnamespacefoo(); や subnamespacefoo::staticmethod(); などの接頭辞を含む名前。現在の名前空間が currentnamespace の場合、foo は currentnamespacesubnamespacefoo に解決されます。 foo を使用するコードがグローバルであり、コードがどの名前空間にも含まれていない場合、foo はサブ名前空間 foo に解決されます。
完全修飾名 (名前に名前空間区切り文字が含まれ、名前空間区切り文字で始まる識別子)、またはグローバル接頭辞演算子を含む名前。グローバル クラス、関数、または定数にアクセスするには、 strlen() や Exception などの完全修飾名を使用します。
ヒント:
$a = '\namespacename\classname'; $obj = new $a; $a = 'namespacename\classname'; $obj = new $a; $b = 'namespacename\funcname'; $b(); // prints namespacename\funcname$b = '\namespacename\funcname'; $b(); // also prints namespacename\funcname
関連する定数を使用する
定数 __NAMESPACE__ の値は、現在の名前空間の名前を含む文字列です。どの名前空間にも含まれていないグローバル コードには、空の文字列が含まれます。
Use namespace:alias/import
<?php namespace foo; use My\Full\Classname as Another; // 下面的例子与 use My\Full\NSname as NSname 相同 use My\Full\NSname; // 导入一个全局类 use ArrayObject; // importing a function (PHP 5.6+) use function My\Full\functionName; // aliasing a function (PHP 5.6+) use function My\Full\functionName as func; // importing a constant (PHP 5.6+) use const My\Full\CONSTANT; $obj = new namespace\Another; // 实例化 foo\Another 对象 $obj = new Another; // 实例化 My\Full\Classname 对象 NSname\subns\func(); // 调用函数 My\Full\NSname\subns\func $a = new ArrayObject(array(1)); // 实例化 ArrayObject 对象 // 如果不使用 "use \ArrayObject" ,则实例化一个 foo\ArrayObject 对象 func(); // calls function My\Full\functionName echo CONSTANT; // echoes the value of My\Full\CONSTANT ?>
クラス名は常に現在の名前空間内の名前に解決されます。したがって、システムの内部にあるクラス名、または名前空間に含まれていないクラス名にアクセスする場合は、完全修飾名を使用する必要があります。