Příkaz use a jmenné prostory v OOP v PHP

Předpokládejme, že máme následující třídu Data:

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

Předpokládejme také, že existuje třída Page, která vytváří uvnitř sebe objekty třídy Data:

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

Jak vidíte, obě naše třídy se nacházejí v úplně jiných jmenných prostorech, proto volání třídy Data nelze zjednodušit, podobně jako jsme to dělali v předchozí lekci. Tato volání jsou však velmi dlouhá a nepohodlná, protože v každém volání třídy Data musíme uvádět její dlouhý jmenný prostor.

Pro řešení podobného problému existuje speciální příkaz use. Pomocí tohoto příkazu stačí jednou připojit třídu podle jejího úplného jména, a poté lze k této třídě přistupovat jednoduše podle názvu třídy. Podívejte se na příklad:

/users/page.php<?php
  namespace Users;
  use \Core\Admin\Data; // připojíme třídu
  
  class Page extends Controller
  {
    public function __construct()
    {
      $data1 = new Data('1'); // voláme jednoduše podle jména
      $data2 = new Data('2'); // voláme jednoduše podle jména
    }
  }
?>
Задание 1

Zjednodušte následující kód pomocí use:

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

Jsou dány následující třídy:

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

Zjednodušte kód dědičnosti třídy pomocí příkazu use.