Use-komennon ja nimiavaruuksien käyttö OOP:ssa PHP:ssä

Oletetaan, että meillä on seuraava luokka Data:

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

Oletetaan myös, että on olemassa luokka Page, joka luo sisällään Data-luokan olioita:

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

Kuten näette, molemmat luokkamme sijaitsevat hyvin erilaisissa nimiavaruuksissa, joten Data-luokan kutsuja ei voida yksinkertaistaa samalla tavalla kuin teimme edellisessä oppitunnissa. Nämä kutsut ovat kuitenkin hyvin pitkiä ja hankalia, koska jokaisessa Data-luokan kutsussa on määritettävä sen pitkä nimiavaruus.

Tällaisen ongelman ratkaisemiseksi on olemassa erityiskomento use. Tämän -komennon avulla riittää, että yhdistät luokan kerran sen täydellisellä nimellä, ja sen jälkeen voit viitata tähän luokkaan yksinkertaisesti luokan nimellä. Katso esimerkki:

/users/page.php<?php
  namespace Users;
  use \Core\Admin\Data; // yhdistetään luokka
  
  class Page extends Controller
  {
    public function __construct()
    {
      $data1 = new Data('1'); // kutsutaan yksinkertaisesti nimellä
      $data2 = new Data('2'); // kutsutaan yksinkertaisesti nimellä
    }
  }
?>
Задание 1

Yksinkertaista seuraava koodi käyttämällä use:tä:

php<?php
  namespace Project;
  
  class Test
  {
    public function __construct()
    {
      // Luodaan 3 oliota yhdestä luokasta:
      $data1  = new \Core\Users\Data('user1');
      $data2  = new \Core\Users\Data('user3');
      $data3  = new \Core\Users\Data('user3');
    }
  }
?>
Задание 2

Annettu seuraavat luokat:

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

Yksinkertaista periytymiskoodi käyttämällä use-komentoa.