Ukaz use in imenski prostori v OOP v PHP

Recimo, da imamo naslednji razred Data:

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

Recimo, da obstaja tudi razred Page, ki znotraj sebe ustvarja objekte razreda Data:

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

Kot vidite, sta oba naša razreda v povsem različnih imenskih prostorih, zato klicov razreda Data ni mogoče poenostaviti, podobno kot smo to storili v prejšnji lekciji. Ti klici so vendar zelo dolgi in neprijetni, saj je v vsakem klicu razreda Data treba navesti njegov dolg imenski prostor.

Za rešitev podobnega problema obstaja poseben ukaz use. Z uporabo tega ukaza je dovolj, da enkrat povežemo razred po njegovem polnem imenu, in po tem se bomo lahko temu razredu sklicevali preprosto z imenom razreda. Poglejte primer:

/users/page.php<?php
  namespace Users;
  use \Core\Admin\Data; // povežemo razred
  
  class Page extends Controller
  {
    public function __construct()
    {
      $data1 = new Data('1'); // kličemo preprosto po imenu
      $data2 = new Data('2'); // kličemo preprosto po imenu
    }
  }
?>
Задание 1

Poenostavite naslednjo kodo z uporabo use:

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

Podani so naslednji razredi:

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

Poenostavite kodo dedovanja razreda z uporabo ukaza use.