Команда use и пространства имен в ООП в PHP

Пусть у нас есть следующий класс 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()
    {
      // Создаем 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.