useの話




名前空間の記事を書いた際に次はuse!! なんて書いていたことを、自分の記事を読んで思い出すとは・・・。『忘れるに任せることが、結局、最も美しく思い出すことなんだ。』(川端康成)とはもっとも美しく忘れるということを表現した言葉であると私は思う。一般的には忘れることはよくないことのように言われているが、脳科学的にも記憶の定着には忘れることが必要であると言われている。一度覚えたことを忘れ(思い出せない状態にする)、再び思い出すこと。それを『望ましい困難』と書いていた本があったことを、私は…今…最も美しく思い出した。そしてuseについて、私の理解が足りないことも・・・。

useのメリット

深い階層の名前空間に属するクラスを利用する場合、フルパスの記述は冗長(じょうちょう)になってしまいます。この場合useを使って、名前空間などをインポートしたり、エイリアスでパスの記述を短くできます。

インポート:取り込む、取り込み、持ち込み、輸入、移入などの意味

エイリアス:偽名、別名、通称などの意味

useを使うことで、名前空間の記述を短くした別名エイリアス)、または同名インポート)を作ることが可能です。

名前空間のエイリアスの作成

useasを組み合わせることでエイリアスを作成することが出来ます。

use 名前空間のすべて、または一部 as 別名;

\ ←バックスラッシュ

useの後に記述する名前空間は完全修飾形式で記述すること。ただし、useキーワードではバックスラッシュは付けないでください。

<?php
namespace asia\japan\kanto\tokyo;

class pref {
     public function getPref() {
          return 'tokyo';
     }
}

getPref()メソッドを呼ぶと、tokyoがreturnされます。

<?php
require_once 'tokyo.php';

use asia\japan\kanto as area;

$a = new area\tokyo\pref;
echo $a->getPref();

結果 tokyo

名前空間のエイリアスを作成しました。このほかに関数、クラス、インターフェイス、定数のエイリアスを作成することが出来ます。asを省略すると一番右にある非修飾名でインポートすることが出来ます。

名前空間のすべて、または一部をインポート

use 完全修飾形式の名前空間または一部;
<?php
namespace asia\japan\kanto\tokyo;

class pref {
     public function getPref() {
          return 'tokyo';
     }
}
<?php
require_once 'tokyo.php';

use asia\japan\kanto;         一番右の非修飾名のkantoでインポートしているので、
                              use asia\japan\kanto as kantoと同じ意味になる。   
$a = new kanto\tokyo\pref; 
echo $a->getPref();

結果 tokyo

クラスをインポート

名前空間のインポート方法とほぼ同じですが、useの後に完全修飾形式でクラス名を記述してください。バックスラッシュは除いてください。

use 完全修飾形式のクラス名;
<?php
namespace asia\japan\kanto\tokyo;

class pref {
     public function getPref() {
          return 'tokyo';
     }
}
<?php
require_once 'tokyo.php';

use asia\japan\kanto\tokyo\pref;         一番右に非修飾名pref(クラス名)と記述することで、
                          クラスをインポートしている。
$b = new pref;
echo $b->getPref();

結果 tokyo

クラスをまとめてインポート(カンマ区切り)

use 完全修飾形式のクラス名 , 完全修飾形式のクラス名;

クラスとまとめてインポート(波括弧・カンマ区切り)

use 完全修飾形式{クラス名 , クラス名};

関数をインポート

関数をインポートするときは、use function のあとに完全修飾形式で関数名を記述してください。この場合もバックスラッシュは除いてください。

use function 完全修飾形式の関数名;
<?php
namespace asia\japan\kanto\tokyo;          名前空間の定義

     public function getFruit() {          getFruit()関数を定義
          return 'cherry';
     }
<?php
require_once 'tokyo.php';
use function asia\japan\kanto\tokyo\getFruit;

echo getFruit();          ※PHP5.6.0より前のバージョンではインポートできません。

結果 cherry

定数をインポート

定数のインポートはuse const の後に、こちらもバックスラッシュを除いた完全修飾形式で記述します。

use const 完全修飾形式の定数名;

const(定数)については、誰も教えてくれないconst(定数)の上手な使い方を参照してください。

<?php
namespace asia\japan\kanto\tokyo;

const WOOD = 'cherry Blossoms';
<?php
require_once 'tokyo.php';
use const asia\japan\kanto\tokyo\WOOD;         定数をインポートしています。

echo WOOD;

結果 cherry Blossoms

インポート・エイリアスの有効範囲は同じファイルの同じ名前空間のみです。

最後まで読んでいただき、ありがとうございました。




ABOUT US
kee
フルマラソン3:27:43!! ファイナンシャルプランナー&JADPメンタル心理カウンセラー&上級心理カウンセラー! 普段は食品工場で仕事をしています。ランニング大好き、料理大好き、サッカー大好き、キャンプ大好き、お酒大好き、釣り大好き、激辛大好き、読書大好き、書ききれないほどの大好きに囲まれて毎日幸せを実感しています。夢はホノルルマラソンに出ること。 座右の銘『明日死ぬかのように生きよ、永遠に生きるかのように学べ』 このブログは忘れやすい私の備忘録、私の脳の第2領域です。