#名前空間のuseのasについて検証した。
名前空間についての基礎はこちら
class 基本 名前空間
##執筆のきっかけ
cakephpを触っているとよく
namespace App\Model\Entity;
use Cake\ORM\Entity;
class hoge()
{
}
といった内容を見かけます。
あれ、useってasで別名(エイリアス)つけるんじゃ、、、
そう思って調べてみました。
##useのasは省略出来る
以下の記事にまとまっていました
参考:https://remotestance.com/blog/3064/
##そもそも名前空間とは
たくさんのファイルがあって、同名のクラスが重複されて使用されている場合、requier
などで別ファイルを読み取ってクラスを使用した時に、クラス名が重複する場合がある。
そういった時に名前空間を使用すればクラスを呼び出す際に重複を防げる
##実際のコードで見てみる(それぞれのコードは同一のルート上にある装丁です)
例1)
[use.php]
<?php
namespace person\think\like1;
class like
{
public function music(){
echo 'bz'."\n";
}
}
[use2.php]
<?php
namespace person\think\like2;
class like
{
public function music(){
echo 'Tokio'."\n";
}
}
[use3.php]
<?php
require_once 'use.php';
require_once 'use2.php';
use person\think\like1; //use person\think\like1 as like1;と同じ意味
use person\think\like2; //use person\think\like1 as like2;と同じ意味
$like1 = new like1\like();
$like1->music(); //bz
$like2 = new like2\like();
$like2->music(); //Tokio
上記の例はuse.php, use2.phpでそれぞれ同名のクラスlikeを定義している。
use3.phpでそれぞれのファイルを読み込んだ後、クラスlikeを呼び出している。
上記例でもしnamespace
の記述がuse.php, use2.phpでなければ、use3.phpで呼び出した際に「エラーが出る or echoの結果が表示されない」となる。
##useのasについて
use3.phpのようにクラスを呼び出して使用したいファイルではuseを使用することで、クラスを呼び出す際の記述を簡潔に書ける。
asを使用することで呼び出すと時の名前を自由に設定できる。
例えば上記例ではasを使用していませんが
例2)
[use3.php]
use person\think\like1 as bz;
use person\think\like2 as Tokio;
$like1 = new bz\like();
$like1->music(); //bz
$like2 = new Tokio\like();
$like2->music(); //Tokio
のように使用出来ます。
##結局as使うのと使わないのって何が違うの?
上記までの説明を踏まえると
asはuseを使用する際に自由に名前(エイリアス)をつける時に使用するが、特に必要がなければasを書かず
以下の例1のように
例1抜粋
use person\think\like1;
use person\think\like2;
$like1 = new like1\like();
$like1->music(); //bz
$like2 = new like2\like();
$like2->music(); //Tokio
like1, like2を例2のようにbzやTokioという名前の代わりにそのまま使用出来るのでより簡潔に書けます。
##まとめ
asを使用するしないはどちらでも良いと思いますが、asは省略出来るということを押さえておくとフレームワークを使用する際に理解が進むと思います。