PHPの名前空間メモ
名前空間とはクラスや関数などの名前の衝突を防ぐために「名前の空間」を利用して、それぞれグループ化することがあります。
とにかくクラスなどを衝突させない為の仕組みです。
以下が名前空間の簡単な例です。
````php namespace Animal\Bird;
class Pigeon
{ public function eat(){ echo 'もぐもぐ'; } } ````
require_once
<?php require_once 'Animal\Bird\Pigeon.php'; $obj = new Animal\Bird\Pigeon(); $obj->eat(); //もぐもぐ
名前空間の付け方
namespace 名前空間;
階層化させる場合は\
で区切ります。
namespace 名前空間\サブ\サブ
名前空間は、Class、関数、定数に影響します。
<?php namespace Animal\Bird; class Pigeon { public function eat(){ echo 'もぐもぐ'; } } function fly(){ echo 'バタバタ'; } const name = '鳩';
<?php require_once 'Animal\Bird\Pigeon.php'; $obj = new Animal\Bird\Pigeon(); $obj->eat(); // もぐもぐ Animal\Bird\fly(); // バタバタ echo Animal\Bird\name; //鳩
名前空間の参照方法
同じ名前空間
同じ名前空間の場合は、名前空間の指定を省略できます。 絶亭指定もできます。
<?php namespace Animal\Bird; class Pigeon { public function eat(){ echo 'もぐもぐ'; } } $pigeon = new Pigeon(); $pigeon->eat(); $pigeon = new \Animal\Bird\Pigeon(); $pigeon->eat();
別な名前空間
絶対値で指定する必要があります。
<?php namespace Animal\Mammalian; require_once 'Animal\Bird\Pigeon.php'; $obj = new \Animal\Bird\Pigeon(); $obj->eat();
グローバルな空間
グローバルな空間からは、相対指定することができます。
<?php require_once 'Animal\Bird\Pigeon.php'; $obj = new Animal\Bird\Pigeon(); $obj->eat();
useキーワードとasキーワード
useキーワードとasキーワードを利用することで、名前空間にエイリアスを作成することができます。
use 名前空間 as エイリアス名
以下の名前空有感のエイリアスを作成します。
<?php namespace Animal\Bird\Japan; class Pigeon { public function eat(){ echo 'もぐもぐ'; } } function fly(){ echo 'バタバタ'; } const name = '鳩';
名前空間を全て定義する。
<?php require_once 'Pigeon.php'; use Animal\Bird\Japan as Hoge; $obj = new Hoge\Pigeon(); $obj->eat(); // もぐもぐ
名前空間の一部を定義する。
<?php require_once 'MyClass.php'; use Animal\Bird as Hoge; $obj = new Hoge\Japan\Pigeon(); $obj->eat();// もぐもぐ
名前空間をインポート。
<?php require_once 'MyClass.php'; use Animal\Bird\Japan; // Animal\Bird\Japan as Japanと同じ $obj = new Japan\Pigeon(); $obj->eat();
クラス名を指定してインポートすることもできます。
<?php require_once 'MyClass.php'; use Animal\Bird\Japan\Pigeon; $obj = new Pigeon(); $obj->eat();// もぐもぐ
関数をインポートする場合は...
<?php require_once 'MyClass.php'; use function Animal\Bird\Japan\fly; echo fly();
定数をインポートする場合は...
<?php require_once 'MyClass.php'; use const Animal\Bird\Japan\name; echo name; //鳩
名前空間を変数にいれて使う場合
\
がエスケープされる場合は\\
のようにする必要があります。
<?php require_once 'MyClass.php'; $class_name = "Animal\Bird\Japan\Pigeon"; $obj = new $class_name(); $obj->eat(); // もぐもぐ