PHPのOOPにおけるuseコマンドと名前空間

次のDataクラスがあるとします:

/core/admin/data.php<?php
  namespace \Core\Admin;
  
  class Data
  {
    public function __construct($num)
    {
      
    }
  }
?>

また、Pageクラスがあり、その内部でDataクラスのオブジェクトを作成しているとします:

/users/page.php<?php
  namespace Users;
  
  class Page
  {
    public function __construct()
    {
      $data1 = new \Core\Admin\Data('1');
      $data2 = new \Core\Admin\Data('2');
    }
  }
?>

ご覧の通り、両方のクラスは完全に異なる名前空間に存在するため、前のレッスンで行ったようにDataクラスの呼び出しを簡略化することはできません。しかし、これらの呼び出しは非常に長く不便です。なぜなら、Dataクラスを呼び出すたびに、その長い名前空間を指定する必要があるからです。

このような問題を解決するために、特別なコマンドuseが存在します。このコマンドを使用して、完全修飾名でクラスを一度だけインポートすれば、その後はクラス名だけでそのクラスを参照できるようになります。以下の例を見てください:

/users/page.php<?php
  namespace Users;
  use \Core\Admin\Data; // クラスをインポート
  
  class Page extends Controller
  {
    public function __construct()
    {
      $data1 = new Data('1'); // 単純な名前で呼び出し
      $data2 = new Data('2'); // 単純な名前で呼び出し
    }
  }
?>
Задание 1

useを使用して以下のコードを簡略化してください:

php<?php
  namespace Project;
  
  class Test
  {
    public function __construct()
    {
      // 1つのクラスの3つのオブジェクトを作成:
      $data1  = new \Core\Users\Data('user1');
      $data2  = new \Core\Users\Data('user3');
      $data3  = new \Core\Users\Data('user3');
    }
  }
?>
Задание 2

以下のクラスが与えられています:

php<?php
  namespace Core\Admin;
  
  class Controller
  {
    
  }
?>
php<?php
  namespace Users;
  
  class Page extends \Core\Admin\Controller
  {
    
  }
?>

useコマンドを適用して、クラスの継承コードを簡略化してください。