Menu
Coddy logo textTech

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 宣言(ある場合)の後、かつ他のコードよりも前に記述する必要があります。繰り返される名前空間のパスを排除することで、コードをよりクリーンで読みやすくします。

challenge icon

チャレンジ

簡単

use キーワードを使用してクラスをクリーンにインポートし、いたる所に完全な名前空間パスを記述するのを避けることで、メッセージングアプリケーションを整理しましょう。

連携して動作する3つのファイルを作成します:

  • Messaging/Email.phpMessaging 名前空間に Email クラスを定義します。このクラスには、public $address プロパティ、アドレスを受け取って設定するコンストラクタ、および "Sending email to [address]" を返す send() メソッドが必要です。
  • Messaging/SMS.phpMessaging 名前空間に 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() を呼び出した結果を出力する(それぞれ個別の行に)

?>
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

オブジェクト指向プログラミングのすべてのレッスン