Edited at

PHPの名前空間

More than 3 years have passed since last update.


はじめに

基礎的な部分ではありますが、PHPの名前空間はわりと分かりやすかったです。

自分の学習用なので、間違いがあったらコメントください。


名前空間

名前空間は、変数や関数の衝突を避けるために使用します。

jsでは空のオブジェクトを使って名前空間を作ったりしてましたが、PHPはわかりやすいです。

名前空間を作るには、namespaceで作ります。


User.php

<?php

namespace myLib\lib;

function showAge(){
echo '55';
}

const NICK_NAME = '加藤';

class User{
public $name = '佐藤';
}
?>



index.php

<?php

require 'User.php';

$user = new myLib\lib\User();
echo $user -> name;//佐藤

myLib\lib\showAge();//55

echo myLib\lib\NICK_NAME;//加藤

?>



名前空間のルール

名前空間の前に記述できるのは、declare文のみです。

htmlなどの記述があるとエラーとなります。


User.php

<!DOCTYPE html>

<?php
namespace myLib\lib;//Fatal error

class User{
public $name = '佐藤';
}
?>



名前空間の階層構造

ディレクトリと同じように、名前空間は階層構造を持たせることができます。

階層構造を定義するには\(バックスラッシュ)を使用します。

namespace myLib\lib;


useで名前空間の参照をシンプルにする

例えば下記のように、名前空間の参照が複数登場したとします。

そんな場合、use 名前空間識別子 as 識別子名を使用します。

<?php

require 'User.php';

$user = new myLib\lib\User();
echo $user -> name;//佐藤

myLib\lib\showAge();//55

echo myLib\lib\NICK_NAME;//加藤

?>


useを使う

<?php

require 'User.php';

use myLib\lib as lib;

$user = new lib\User();
echo $user -> name;//佐藤

lib\showAge();//55

echo lib\NICK_NAME;//加藤

?>


終わり

他にも色々あるようなのですが、追記していきます。