PHPと名前空間

namespaceは名前空間と呼ばれ、項目をカプセル化するときに使用する
通常、同じファイルに同じクラスや関数名、定数めいが存在することはできないが、名前空間を使用することにより、関連するクラスやインターフェイス、関数、定数などをグループ化することが可能
名前が衝突することを防ぐことができる
namespaceは以下のように記述する

namespace 名前空間名;

ソースコードの一番先頭で宣言する必要があり、namespaceの前にHTMLを記述するとエラーになる

sample1.php

namespace name1;
function getName(){
	return "fruit";
}

namespace name2;
function getName(){
	return "ore";
}

sample2.php

//phpファイルを読み込む
require_once 'sample1.php';
 
//関数の呼出し
echo name1\getName();
echo name2\getName();

$ php sample2.php
fruitore

namespaceを宣言すると、その後に記述した関数はその名前空間の関数に属する
名前空間\関数名とすれば同一の関数を呼び出すことが可能になる

波括弧で指定したい範囲を囲むこともできる

namespace name1 {
	function getName(){
		return "fruit";
	}
}

namespace name2{
	function getName(){
		return "ore";
	}
}

波括弧で囲むと、名前空間の範囲外で命令文を記述することができなくなってしまう

namespace name1 {
	function getName(){
		return "fruit";
	}
}


namespace name2{
	function getName(){
		return "ore";
	}
}

echo "Hello World!";

### useの使い方
useとは名前空間の拡張機能で、外部のエイリアスやその一部を参照したり、クラス・関数・定数などをインポートするときに使用する

namespace asia\japan\tokyo\shibuya;

function getName(){
	return "shibuya";
}


namespace asia\japan\tokyo\minato;

function getName(){
	return "minato";
}

namespace asia\japan\tokyo\shinagawa;

function getName(){
	return "shinagawa";
}
[_code]


require_once "sample1.php";

use asia\japan\tokyo as name;

echo name\shibuya\getName();
echo name\minato\getName();

名前空間のnamespaceとuseはなんとなくわかったが、composer.jsonのpsr-4, psr-0がイマイチよくわからん。。