Príkaz use a menné priestory v OOP v PHP

Majme nasledujúcu triedu Data:

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

Nech je tiež trieda Page, ktorá vytvára vo svojom vnútri objekty triedy Data:

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

Ako vidíte, obe naše triedy sa nachádzajú v úplne rôznych menných priestoroch, preto volania triedy Data nie je možné zjednodušiť, podobne ako sme to robili v predchádzajúcej lekcii. Tieto volania sú však veľmi dlhé a nepohodlné, pretože v každom volaní triedy Data musíme uvádzať jeho dlhý menný priestor.

Na vyriešenie tohto problému existuje špeciálny príkaz use. Pomocou tohto príkazu stačí raz pripojiť triedu podľa jej celého názvu, a potom sa bude možné na túto triedu odvolávať jednoducho podľa názvu triedy. Pozrite si príklad:

/users/page.php<?php
  namespace Users;
  use \Core\Admin\Data; // pripájame triedu
  
  class Page extends Controller
  {
    public function __construct()
    {
      $data1 = new Data('1'); // voláme jednoducho podľa názvu
      $data2 = new Data('2'); // voláme jednoducho podľa názvu
    }
  }
?>
Задание 1

Zjednodušte nasledujúci kód pomocou use:

php<?php
  namespace Project;
  
  class Test
  {
    public function __construct()
    {
      // Vytvárame 3 objekty jednej triedy:
      $data1  = new \Core\Users\Data('user1');
      $data2  = new \Core\Users\Data('user3');
      $data3  = new \Core\Users\Data('user3');
    }
  }
?>
Задание 2

Dané sú nasledujúce triedy:

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

Zjednodušte kód dedenia triedy aplikovaním príkazu use.