名前空間は、名前空間キーワードから始まり、以下に示すように、次のように名前空間名が続きます。
namespace MyNamespace;
このようにして、異なるクラスを異なる名前空間に配置することができ、それによりコードの組織と保守性が向上します。
プロジェクトがあり、プロジェクトのファイル構造が次のとおりです。
- project
- src
- MyNamespace
- MyClass.php
MyClass.phpでは、 MyClassクラスを定義します。クラスをmynamespaceの名前空間に関連付けるには、次のようにmyclass.phpファイルの先頭に名前空間ステートメントを追加する必要があります。
namespace MyNamespace;
class MyClass {
// クラスの実装
}
このようにして、 MyClassクラスはMyNamesPace NameSpaceに属します。
他のPHPファイルでは、使用ステートメントを使用して名前空間を導入してから、このクラスを使用できます。
use MyNamespace\MyClass;
$object = new MyClass();
プロジェクトディレクトリ構造が次のとおりであるとします。
- project
- src
- MyNamespace
- MyClass.php
- SubNamespace
- MySubClass.php
myClass.phpでは、 myNamespaceの名前空間の下にMyClassクラスを定義します。 MySubclass.phpでは、 myNamespace \ subnamespaceネームスペースの下にMySubClassクラスを定義します。
他のPHPファイルでは、これら2つのクラスを次の方法で導入できます。
use MyNamespace\MyClass;
use MyNamespace\SubNamespace\MySubClass;
$myClass = new MyClass();
$mySubClass = new MySubClass();
このようにして、PHPコードのクラス間の階層的な関係を明確に見ることができるだけでなく、ファイルシステム内の対応するファイルを正確に見つけることもできます。
名前空間を合理的に使用すると、プロジェクトコード構造をより明確にし、開発中のカオスを減らすことができます。関連するクラスと機能モジュールを対応する名前空間に整理することは、コードの品質を改善するだけでなく、開発チームがより効率的にコラボレーションするのにも役立ちます。
プロジェクト構造:
- project
- src
- MyNamespace
- MyClass.php
- SubNamespace
- MySubClass.php
- index.php
myclass.phpファイルコンテンツ:
<?php
namespace MyNamespace;
class MyClass {
public function sayHello() {
echo "Hello from MyClass!";
}
}
mySubclass.phpファイルコンテンツ:
<?php
namespace MyNamespace\SubNamespace;
class MySubClass {
public function sayHello() {
echo "Hello from MySubClass!";
}
}
index.phpファイルの内容:
<?php
require_once 'src/MyNamespace/MyClass.php';
require_once 'src/MyNamespace/SubNamespace/MySubClass.php';
use MyNamespace\MyClass;
use MyNamespace\SubNamespace\MySubClass;
$myClass = new MyClass();
$myClass->sayHello();
$mySubClass = new MySubClass();
$mySubClass->sayHello();
index.phpファイルを実行した後、出力は次のとおりです。
Hello from MyClass!
Hello from MySubClass!