ใช้นามแฝงของคลาสสำหรับเนมสเปซใน OOP ใน PHP

สมมติว่าเรามีสองคลาส Data, ซึ่งอยู่ในเนมสเปซที่ต่างกัน สมมติว่าในบางคลาสเราต้องการออบเจ็กต์ จากทั้งสองคลาสนี้:

/project/test.php<?php
  namespace Project;
  
  class Test
  {
    public function __construct()
    {
      $data1 = new \Core\Users\Data; // สร้างออบเจ็กต์
      $data2 = new \Core\Admin\Data; // สร้างออบเจ็กต์
    }
  }
?>

สมมติว่าเราตัดสินใจจะย่อการเรียกใช้คลาส ด้วยคำสั่ง use ในกรณีนี้เราจะ พบปัญหา: ทั้งสองคลาสมีชื่อว่า Data, ซึ่งหมายความว่าเราจะมีข้อขัดแย้งของชื่อ:

/project/test.php<?php
  namespace Project;
  
  // จะมีข้อขัดแย้งของชื่อ:
  use \Core\Users\Data; // เชื่อมต่อคลาสแรก
  use \Core\Admin\Data; // เชื่อมต่อคลาสที่สอง
  
  class Test
  {
    public function __construct()
    {
      $data1 = new Data;
      $data2 = new Data;
    }
  }
?>

สำหรับการแก้ปัญหานี้มีคำสั่งพิเศษ คือ as ซึ่งอนุญาตให้กำหนดนามแฝงให้กับคลาสที่เชื่อมต่อ - ชื่อที่คลาสนี้จะสามารถเข้าถึงได้ในไฟล์นี้ มาลอง เปลี่ยนชื่อคลาส Dataของเรากัน:

/project/test.php<?php
  namespace Project;
  use \Core\Users\Data as UsersData;
  use \Core\Admin\Data as AdminData;
  
  class Test
  {
    public function __construct()
    {
      $data1 = new UsersData;
      $data2 = new AdminData;
    }
  }
?>
Задание 1

ลดรูปโค้ดต่อไปนี้โดยใช้ use:

php<?php
  namespace Project;
  
  class Test
  {
    public function __construct()
    {
      $pageController  = new \Resource\Controller\Page;
      $pageModel       = new \Resource\Model\Page;
    }
  }
?>
Задание 2

ลดรูปโค้ดต่อไปนี้โดยใช้ use:

php<?php
  namespace Project\Data;
  
  class Test
  {
    public function __construct()
    {
      $pageController  = new \Project\Data\Controller\Page;
      $pageModel       = new \Project\Data\Model\Page;
    }
  }
?>