PHP 名前空間(namespace、use)

作成日:2018-12-03, 更新日:2018-12-03

基本

■基本構成の例
├ /mylib
│└ hoge.class.php
└ main.php

名前空間を使わないとき

▼/mylib/hoge.class.php

<?php
class sample {
   ~ 省略 ~
}

▼main.php

<?php
require_once __DIR__ . '/mylib/hoge.class.php';

$hoge = new sample();

名前空間を使うとき1

▼/mylib/hoge.class.php

<?php
namespace Nstest; // 名前空間の指定←これより前で、echoとか出力禁止。処理も禁止。
class sample {
   ~ 省略 ~
}

▼main.php

<?php
require_once __DIR__ . '/mylib/hoge.class.php';
use Nstest\sample; // 使うclassの指定

$hoge = new sample();
// staticとかだったら「sample::〇〇()」も使える

名前空間を使うとき2(クラス名のエイリアス)

▼main.php

<?php
require_once __DIR__ . '/mylib/hoge.class.php';
use Nstest\sample as foo; // 別名指定

$hoge = new foo();
// staticとかだったら「foo::〇〇()」で実行させる

※同名のclass名を使うときは必須になると思う。

名前空間を使うとき3(その他)

ひとまずメモのみ

一つのファイルに複数のclass記載

<?php
namespace Mylib {
  class hoge {
     ~ 省略 ~
  }
  class foo {
     ~ 省略 ~
  }
}

▼main.php

<?php
require_once __DIR__ . '/mylib/hoge.class.php';

// それぞれのclassをuseで宣言
use Mylib\hoge;
use Mylib\foo;

new hoge();
new foo();

一つのファイルでclassを名前空間でくくる

<?php
namespace Mylib {
  class hoge {
     ~ 省略 ~
  }
}

namespace Mylib2 {
  class hoge {
     ~ 省略 ~
  }
}

関連項目

Composerで独自ライブラリを使う