クラスの数が増えてくると整理がしにくくなったり、また複数の外部ファイルを読み込んだりすると、クラス名が重複したりする事があります。
これを防ぐために、クラスはネームスペース(名前空間)に分類して管理することができます。例えば次のようなファイルを準備しましょう。
/* bookstore/book.php */
namespace Store\Book;
// 書籍
class Book {
private int $price;
}
もう1つ、次のファイルを準備します。
/* member.php */
namespace Member;
// メンバー
class Member {
private string $name;
}
ここでは、Bookと Memberという2つのクラスを定義していますが、このそれぞれはまったく別の機能で利用するためのクラスです。そのため、ネームスペースをそれぞれ分けて管理しています。
ネームスペース内のクラスを利用する
ネームスペースに分けたクラスを利用する場合は、宣言の時の記述が次のように変わります。
<?php
require_once 'store/book.php';
$book = new Store\Book();
このように、バックスラッシュ区切りでネームスペースを指定します。
ネームスペースをあらかじめ定義する – use
ネームスペースを毎回指定するのが面倒な場合は、あらかじめ「use」で宣言しておくことで、省略することができます。
<?php
require_once 'store/book.php';
use Store\Book;
$book = new Book();
同じ名前のクラスに別名を付加する – as
複数のネームスペースの中に、同じクラス名があった場合、そのままでは正しく扱えません。例えば、先のmember.phpの中に、「Book」というクラスを定義してみましょう。
/* Review/Book */
namespace Review\Book;
class Book {
private int $star;
}
この場合、次のように参照すると同じクラス名なのでエラーになります。
require_once 'store/book.php';
require_once 'review/book.php';
use Store\Book;
use Review\Book;
そこで、この場合に「as」というキーワードでそれぞれに別名を付加すると利用できるようになります。
require_once 'store/book.php';
require_once 'review/book.php';
use Store\Book as BookStore;
use Review\Book as BookReview;
$bookStore = new BookStore();
$bookReview = new BookReview();