Comanda use și spațiile de nume în OOP în PHP

Să presupunem că avem următoarea clasă Data:

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

Să presupunem că există și clasa Page, care creează în interiorul ei obiecte ale clasei Data:

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

După cum vedeți, ambele clase se află în spații de nume complet diferite, de aceea apelurile clasei Data nu pot fi simplificate, similar cu cum am făcut în lecția precedentă. Aceste apeluri, totuși, sunt foarte lungi și incomode, deoarece în fiecare apel al clasei Data trebuie indicat spațiul său lung de nume.

Pentru a rezolva această problemă există o comandă specială use. Cu ajutorul acestei comenzi este suficient să conectați o dată clasa după numele său complet, iar după aceea se va putea accesa această clasă pur și simplu după numele clasei. Vedeți exemplul:

/users/page.php<?php
  namespace Users;
  use \Core\Admin\Data; // conectăm clasa
  
  class Page extends Controller
  {
    public function __construct()
    {
      $data1 = new Data('1'); // apelăm pur și simplu după nume
      $data2 = new Data('2'); // apelăm pur și simplu după nume
    }
  }
?>
Задание 1

Simplificați următorul cod folosind use:

php<?php
  namespace Project;
  
  class Test
  {
    public function __construct()
    {
      // Creăm 3 obiecte ale aceleiași clase:
      $data1  = new \Core\Users\Data('user1');
      $data2  = new \Core\Users\Data('user3');
      $data3  = new \Core\Users\Data('user3');
    }
  }
?>
Задание 2

Sunt date următoarele clase:

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

Simplificați codul de moștenire a clasei, aplicând comanda use.