Bruk av use og navnerom i OOP i PHP

La oss si at vi har følgende klasse Data:

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

La oss også si at det er en klasse Page som oppretter objekter av klassen Data inni seg:

/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 ser, ligger begge klassene våre i helt forskjellige navnerom, derfor kan ikke kall til klassen Data forenkles, på samme måte som vi gjorde i forrige leksjon. Disse kallene er imidlertid veldig lange og upraktiske, ettersom det i hvert kall til klassen Data må oppgis dens lange navnerom.

For å løse slike problemer finnes det en spesiell kommando use. Med denne kommandoen er det nok å koble til klassen én gang med sitt fulle navn, og etter det kan man referere til denne klassen bare med klassenavnet. Se eksempel:

/users/page.php<?php
  namespace Users;
  use \Core\Admin\Data; // kobler til klassen
  
  class Page extends Controller
  {
    public function __construct()
    {
      $data1 = new Data('1'); // kaller bare med navnet
      $data2 = new Data('2'); // kaller bare med navnet
    }
  }
?>
Задание 1

Forenkle følgende kode ved bruk av use:

php<?php
  namespace Project;
  
  class Test
  {
    public function __construct()
    {
      // Oppretter 3 objekter av 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 gitt:

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

Forenkle koden for klassearving ved å bruke kommandoen use.