คำสั่ง use และ namespace ใน OOP ใน 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');
    }
  }
?>

ดังที่คุณเห็น คลาสทั้งสองของเราอยู่ใน namespace ที่ต่างกันโดยสิ้นเชิง ดังนั้นการเรียกใช้คลาส Data จึงไม่สามารถทำให้ง่ายได้ เหมือนที่เราทำในบทเรียนก่อนหน้า อย่างไรก็ตาม การเรียกใช้นี้ยาวและไม่สะดวกมาก เพราะในแต่ละครั้งที่เรียกคลาส Data ต้องระบุ namespace ที่ยาวของมัน

เพื่อแก้ปัญหาประเภทนี้ มีคำสั่งพิเศษชื่อ 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