Η εντολή use και οι χώροι ονομάτων στην αντικειμενοστρεφή προγραμματισμό στην PHP

Ας υποθέσουμε ότι έχουμε την ακόλουθη κλάση Data:

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

Ας υποθέσουμε επίσης ότι υπάρχει μια κλάση Page, που δημιουργεί μέσα σε αυτήν αντικείμενα της κλάσης Data:

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

Όπως βλέπετε, και οι δύο κλάσεις μας βρίσκονται σε εντελώς διαφορετικούς χώρους ονομάτων, επομένως οι κλήσεις της κλάσης Data δεν μπορούν να απλοποιηθούν, όπως ακριβώς κάναμε στο προηγούμενο μάθημα. Ωστόσο, αυτές οι κλήσεις είναι πολύ μεγάλες και άβολες, αφού σε κάθε κλήση της κλάσης Data πρέπει να καθορίζουμε τον μεγάλο του χώρο ονομάτων.

Για την επίλυση ενός τέτοιου προβλήματος υπάρχει μια ειδική εντολή use. Με τη βοήθεια αυτής της εντολής αρκεί να συνδεθεί μια φορά η κλάση με το πλήρες όνομά της, και μετά από αυτό μπορούμε να αναφερθούμε σε αυτήν την κλάση απλά με το όνομα της κλάσης. Δείτε το παράδειγμα:

/users/page.php<?php
  namespace Users;
  use \Core\Admin\Data; // συνδέουμε την κλάση
  
  class Page extends Controller
  {
    public function __construct()
    {
      $data1 = new Data('1'); // καλούμε απλά με το όνομα
      $data2 = new Data('2'); // καλούμε απλά με το όνομα
    }
  }
?>
Задание 1

Απλοποιήστε τον ακόλουθο κώδικα χρησιμοποιώντας την use:

php<?php
  namespace Project;
  
  class Test
  {
    public function __construct()
    {
      // Δημιουργούμε 3 αντικείμενα μιας κλάσης:
      $data1  = new \Core\Users\Data('user1');
      $data2  = new \Core\Users\Data('user3');
      $data3  = new \Core\Users\Data('user3');
    }
  }
?>
Задание 2

Δίνονται οι ακόλουθες κλάσεις:

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

Απλοποιήστε τον κώδικα κληρονομικότητας της κλάσης, εφαρμόζοντας την εντολή use.