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(...)と記述できるようになります。
チートシート
use キーワードは、ファイルの先頭でクラスをインポートし、完全な名前空間パスの代わりに短い名前で参照できるようにします。
<?php
use Blog\User;
$user = new User("Alice");
異なる名前空間のクラスが同じ名前を共有している場合は、as キーワードを使用してエイリアスを作成します。
<?php
use Blog\User as BlogUser;
use Shop\User as ShopUser;
$blogger = new BlogUser("Alice");
$customer = new ShopUser("alice@example.com");
グループ化されたインポートを使用して、同じ名前空間から複数のクラスをインポートします。
<?php
use Blog\{User, Post, Comment};
$user = new User("Alice");
$post = new Post("Hello World");
use 文は、(もしあれば)namespace 宣言の後、かつ他のコードの前に記述する必要があります。
自分で試してみよう
<?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() を呼び出した結果を表示します(それぞれを個別の行に表示)
?>このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。