こちらの講座でフレームワークの中身学習中です。
https://www.udemy.com/course/php-mvc-from-scratch
ポイントポイントで学んだことを書いていこうと思います!
今回はネームスペースと、あえてそれを使わない方法について。
ネームスペース/名前空間とは?
phpファイルでclassを利用する時に、複数のファイルに分けてclassの情報を(整頓のため)書いているとします。
例えば別ファイル「post.php」に「Postクラス」の情報があるとします。
その情報を別のファイルで使うには
require post.php
で読み込まなきゃいけません。
で、こういう別ファイル、別classががたくさん存在している時に、自分がどのクラスを使ってるかをわかりやすくするために使うものが名前空間です。
※名前衝突を避けるために使われます。
namespace App;
class Product{
//例えばこの場合、このクラスを利用して新しくProductオブジェクトを作ると、
//App\Product classのオブジェクトが作られます。
}
namespace App\Core;
class Product{
//こちらの場合、このクラスを利用して新しくProductオブジェクトを作ると、
//App\Core\Product classのオブジェクトが作られます。
}
名前空間をあえて使いたくない時
例えば、日付に関する情報を取得したいとき。
グローバルクラスの DateTimeを使うとします。
namespace App;
//classの記述は省略
$date = new DateTime();
//→Appの中のDateTime classがないとフェータルエラー!
このようにnewでDateTime()オブジェクトを作ると、Appの中のDataTme()を使ってしまいます。
namespace Appの宣言をしているからですね。
つまり、App\DataTme のclassがなければエラーになります。
もしそんなclassを作ってたとしても、この状態だと
これ https://www.php.net/manual/ja/class.datetime.php を使いたいのか、
または自作の App\DataTme を本当に使いたいのかが他の人からはわかりません。
この場合は
$datatime = new \DateTme();
とかきます。
バックスラッシュが入ることで、ネームスペースは使わないぞ!と明示的に宣言することができます。
こちらも参考にいたしました!
https://www.php.net/manual/ja/language.namespaces.faq.php#language.namespaces.faq.shouldicare