Komanda use i imenski prostori u OOP u PHP

Recimo da imamo sledeću klasu Data:

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

Neka postoji i klasa Page, koja unutar sebe kreira objekte klase Data:

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

Kao što vidite, obe naše klase se nalaze u potpuno različitim imenskim prostorima, pa pozive klase Data ne možemo pojednostaviti, na sličan način kao što smo to činili u prethodnoj lekciji. Ovi pozivi su, međutim, veoma dugi i nezgodni, jer u svakom pozivu klase Data moramo navesti njegov dugačak imenski prostor.

Za rešavanje sličnog problema postoji specijalna komanda use. Uz pomoć ove komande dovoljno je jednom povezati klasu po njenom punom imenu, i nakon toga ćemo moći da se obraćamo toj klasi jednostavno po imenu klase. Pogledajte primer:

/users/page.php<?php
  namespace Users;
  use \Core\Admin\Data; // povezujemo klasu
  
  class Page extends Controller
  {
    public function __construct()
    {
      $data1 = new Data('1'); // pozivamo jednostavno po imenu
      $data2 = new Data('2'); // pozivamo jednostavno po imenu
    }
  }
?>
Задание 1

Pojednostavite sledeći kod korišćenjem use:

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

Date su sledeće klase:

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

Pojednostavite kod nasleđivanja klase, primenivši komandu use.