Brug af use og navnerum i OOP i PHP

Lad os sige, at vi har følgende klasse Data:

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

Lad os også sige, at der er en klasse Page, der opretter objekter af klassen Data inde i sig selv:

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

Som du kan se, ligger begge vores klasser i helt forskellige navnerum, så kald til klassen Data kan ikke forenkles, på samme måde som vi gjorde i den forrige lektion. Disse kald er dog meget lange og ubelejlige, da det i hvert kald til klassen Data er nødvendigt at angive dens lange navnerum.

For at løse dette problem findes der en speciel kommando use. Ved hjælp af denne kommando er det nok at forbinde klassen med dens fulde navn én gang, og efter det vil det være muligt at henvise til denne klasse blot ved klassenavnet. Se eksemplet:

/users/page.php<?php
  namespace Users;
  use \Core\Admin\Data; // forbinder klassen
  
  class Page extends Controller
  {
    public function __construct()
    {
      $data1 = new Data('1'); // kalder blot efter navn
      $data2 = new Data('2'); // kalder blot efter navn
    }
  }
?>
Задание 1

Forenkl følgende kode ved hjælp af use:

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

Følgende klasser er givet:

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

Forenkl arvekoden ved at anvende kommandoen use.