Dyrektywa use i przestrzenie nazw w OOP w PHP

Załóżmy, że mamy następującą klasę Data:

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

Załóżmy również, że istnieje klasa Page, tworząca wewnątrz siebie obiekty klasy Data:

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

Jak widzicie, obie nasze klasy znajdują się w całkowicie różnych przestrzeniach nazw, dlatego wywołań klasy Data nie można uprościć, podobnie jak robiliśmy to w poprzedniej lekcji. Te wywołania są jednak bardzo długie i niewygodne, ponieważ w każdym wywołaniu klasy Data trzeba podawać jego długą przestrzeń nazw.

Aby rozwiązać ten problem, istnieje specjalna komenda use. Za pomocą tej komandy wystarczy raz podłączyć klasę po jej pełnej nazwie, a po tym można będzie odwoływać się do tej klasy po prostu po nazwie klasy. Spójrzcie na przykład:

/users/page.php<?php
  namespace Users;
  use \Core\Admin\Data; // podłączamy klasę
  
  class Page extends Controller
  {
    public function __construct()
    {
      $data1 = new Data('1'); // wywołujemy po prostu po nazwie
      $data2 = new Data('2'); // wywołujemy po prostu po nazwie
    }
  }
?>
Задание 1

Uprośćcie następujący kod przy użyciu use:

php<?php
  namespace Project;
  
  class Test
  {
    public function __construct()
    {
      // Tworzymy 3 obiekty jednej klasy:
      $data1  = new \Core\Users\Data('user1');
      $data2  = new \Core\Users\Data('user3');
      $data3  = new \Core\Users\Data('user3');
    }
  }
?>
Задание 2

Dane są następujące klasy:

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

Uprośćcie kod dziedziczenia klasy, stosując komendę use.