use キーワード
CoddyのPHPジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 11/91。
クラスを使用するたびに完全な名前空間パスを記述するのは、面倒になることがあります。use キーワードを使用すると、ファイルの先頭でクラスをインポートできるため、短縮名で参照できるようになります。
\Blog\User と繰り返し書く代わりに、一度インポートすることができます:
<?php
use Blog\User;
$user = new User("Alice");
echo $user->name;
異なる名前空間にある同じ名前のクラスが必要な場合、asキーワードを使用してエイリアスを作成できます。
<?php
use Blog\User as BlogUser;
use Shop\User as ShopUser;
$blogger = new BlogUser("Alice");
$customer = new ShopUser("alice@example.com");
echo $blogger->name . "\n";
echo $customer->email . "\n";
出力:
Alice
alice@example.com
グループ化されたインポートを使用して、同じ名前空間から複数のクラスをインポートすることもできます:
<?php
use Blog\{User, Post, Comment};
$user = new User("Alice");
$post = new Post("Hello World");
重要なポイント: use ステートメントは、namespace 宣言(ある場合)の後、かつ他のコードよりも前に記述する必要があります。繰り返される名前空間のパスを排除することで、コードをよりクリーンで読みやすくします。
チャレンジ
簡単use キーワードを使用してクラスをクリーンにインポートし、いたる所に完全な名前空間パスを記述するのを避けることで、メッセージングアプリケーションを整理しましょう。
連携して動作する3つのファイルを作成します:
Messaging/Email.php—Messaging名前空間にEmailクラスを定義します。このクラスには、public $addressプロパティ、アドレスを受け取って設定するコンストラクタ、および"Sending email to [address]"を返すsend()メソッドが必要です。Messaging/SMS.php—Messaging名前空間にSMSクラスを定義します。このクラスには、public $phoneプロパティ、電話番号を受け取って設定するコンストラクタ、および"Sending SMS to [phone]"を返すsend()メソッドが必要です。main.php— 両方のクラスファイルをインクルードし、useキーワードを使用して両方のクラスをインポートします。アドレス"alice@example.com"を持つEmailオブジェクトと、電話番号"555-1234"を持つSMSオブジェクトを作成します。各オブジェクトでsend()を呼び出した結果を(それぞれ個別の行に)出力します。
main.php では、new \Messaging\Email(...) と記述する代わりに、上部で use ステートメントを使用してクラスをインポートすることで、単に new Email(...) や new SMS(...) と記述できるようになります。
自分で試してみよう
<?php
// クラスファイルをインクルードする
require_once 'Messaging/Email.php';
require_once 'Messaging/SMS.php';
// TODO: 'use' キーワードを使用して、Messaging 名前空間から両方のクラスをインポートする
// これにより、'new \Messaging\Email(...)' の代わりに 'new Email(...)' と記述できるようになります
// TODO: アドレス "alice@example.com" を指定して Email オブジェクトを作成する
// TODO: 電話番号 "555-1234" を指定して SMS オブジェクトを作成する
// TODO: 各オブジェクトの send() を呼び出した結果を出力する(それぞれ個別の行に)
?>このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。