Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> PHP

ภาพรวม Namespaces ใน PHP

บทนำ

Namespaces ใน PHP ช่วยให้ Classes/Functions/Constants ชื่อเดียวกันใช้ร่วมกันได้ในบริบทต่างๆ โดยไม่ Conflict ทำงานเหมือนโฟลเดอร์ใน File System - ไฟล์ชื่อเดียวกันอยู่ได้ในโฟลเดอร์ต่างกัน คลาสชื่อเดียวกันอยู่ได้ใน Namespace ต่างกัน ต้องระบุ Full Name พร้อม Namespace เพื่อเข้าถึง

Namespaces สำคัญเมื่อโค้ดโตขึ้น การตั้งชื่อ Unique ให้ทุก Class/Function ยุ่งยาก Namespace ช่วยแก้ปัญหา 2 ข้อ:

  1. ป้องกัน Name Collisions - ระหว่างโค้ดของเรากับ Third-party Libraries
  2. Alias/Shorten ชื่อยาว - เพิ่ม Readability

PHP Namespaces จัดกลุ่ม Classes, Interfaces, Functions, Constants ที่เกี่ยวข้องกัน Namespace Names เป็น Case-insensitive

ตัวอย่างพื้นฐาน

<?php
namespace myspace;
function hello() {
    echo "Hello World\n";
}
?>

การเรียกใช้ Function ใน Namespace

ใช้ use เพื่อ Import แล้ว Qualify ด้วย Namespace:

<?php
namespace myspace;
function hello() {
    echo "Hello World\n";
}

use myspace;
myspace\hello();
?>

ผลลัพธ์

Hello World

Namespace แบบ Nested (Sub-namespaces)

<?php
namespace App\Controller;
class UserController { }

namespace App\Model;
class User { }

namespace App\Service;
class UserService { }
?>

การ Import แบบต่างๆ

<?php
// Import Class
use App\Controller\UserController;
use App\Controller\UserController as UC;

// Import Function
use function App\Helper\formatDate;

// Import Constant
use const App\Config\MAX_USERS;

// Group Use (PHP 7+)
use App\Controller\{UserController, PostController};
use function App\Helper\{formatDate, formatTime};
use const App\Config\{MAX_USERS, MIN_AGE};
?>

ข้อควรระวัง

  • Namespace Declaration ต้องอยู่บรรทัดแรกหลัง <?php (ยกเว้น declare)
  • ไม่สามารถ Wrap Namespace ใน Block ได้ (ยกเว้น Bracketed Syntax)
  • Global Code (ไม่อยู่ใน Namespace) อยู่ใน Global Namespace
  • ใช้ __NAMESPACE__ Magic Constant เพื่อดู Current Namespace