useキーワード
CoddyのPHPジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 11/91。
class を使うたびに完全な namespace パスを書くのは、面倒になることがあります。use keyword を使うと、ファイルの先頭で class を import できるため、短い名前で参照できます。
\Blog\Userを繰り返し記述する代わりに、一度だけインポートできます:
<?php
use Blog\User;
$user = new User("Alice");
echo $user->name;
同じ名前を持つ異なる namespace の classes が必要な場合は、as keyword を使用してエイリアスを作成できます。
<?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
同じ namespace から複数のクラスを grouped imports を使って import することもできます。
<?php
use Blog\{User, Post, Comment};
$user = new User("Alice");
$post = new Post("Hello World");
重要なポイント: use ステートメントは、(存在する場合)namespace 宣言の後、ほかのコードより前に記述する必要があります。これにより、繰り返し使用する namespace パスを省略でき、コードがより簡潔で読みやすくなります。
チャレンジ
簡単use キーワードを使用してクラスをきれいにインポートし、あらゆる場所で完全な namespace パスを書くのを避けながら、Messaging アプリケーションを整理しましょう。
連携して動作する3つのファイルを作成します。
Messaging/Email.php:Messagingnamespace にEmailclass を Define します。public $addressproperty、address を受け取って設定する constructor、そして"Sending email to [address]"を returns するsend()method を持つ必要があります。Messaging/SMS.php:Messagingnamespace にSMSclass を Define します。public $phoneproperty、phone number を受け取って設定する constructor、そして"Sending SMS to [phone]"を returns するsend()method を持つ必要があります。main.php: 両方の class files を Include し、その後useキーワードを使用して両方の classes をインポートします。address が"alice@example.com"のEmailobject と、phone が"555-1234"のSMSobject を Create します。それぞれの object でsend()を calling した result を Print します(それぞれ別の line に出力します)。
main.php では、new \Messaging\Email(...) と書く instead に、ファイルの先頭で use statements を使用して classes をインポートするため、単純に new Email(...) と new SMS(...) と書けます。
自分で試してみよう
<?php
// クラスファイルをインクルードする
require_once 'Messaging/Email.php';
require_once 'Messaging/SMS.php';
// TODO: 'use' キーワードを使って Messaging 名前空間から両方のクラスをインポートする
// これにより 'new Email(...)' と書けるようになり、'new \Messaging\Email(...)' の代わりになる
// TODO: Create an Email object with address "alice@example.com"
// TODO: 電話番号 "555-1234" で SMS オブジェクトを作成する
// TODO: 各オブジェクトで send() を呼び出した結果を出力する(それぞれを別の行に)
?>このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
オブジェクト指向プログラミングのすべてのレッスン
自分で練習してみよう: PHPオンラインコンパイラ