Командата 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.