Il comando use e gli spazi dei nomi nella OOP in PHP

Supponiamo di avere la seguente classe Data:

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

Supponiamo anche che ci sia una classe Page, che crea al suo interno oggetti della classe Data:

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

Come puoi vedere, entrambe le nostre classi si trovano in spazi dei nomi completamente diversi, quindi le chiamate alla classe Data non possono essere semplificate, in modo simile a come abbiamo fatto nella lezione precedente. Queste chiamate, tuttavia, sono molto lunghe e scomode, poiché in ogni chiamata alla classe Data bisogna specificare il suo lungo spazio dei nomi.

Per risolvere questo tipo di problema esiste un comando speciale use. Con questo comando è sufficiente includere la classe una volta per il suo nome completo, e dopo di che si potrà accedere a questa classe semplicemente per nome. Guarda l'esempio:

/users/page.php<?php
  namespace Users;
  use \Core\Admin\Data; // includiamo la classe
  
  class Page extends Controller
  {
    public function __construct()
    {
      $data1 = new Data('1'); // chiamiamo semplicemente per nome
      $data2 = new Data('2'); // chiamiamo semplicemente per nome
    }
  }
?>
Задание 1

Semplifica il seguente codice utilizzando use:

php<?php
  namespace Project;
  
  class Test
  {
    public function __construct()
    {
      // Creiamo 3 oggetti di una stessa classe:
      $data1  = new \Core\Users\Data('user1');
      $data2  = new \Core\Users\Data('user3');
      $data3  = new \Core\Users\Data('user3');
    }
  }
?>
Задание 2

Date le seguenti classi:

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

Semplifica il codice di ereditarietà della classe, applicando il comando use.