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

การกำหนด Multiple Namespaces ในไฟล์เดียว

บทนำ

สามารถประกาศ Multiple Namespaces ในไฟล์ .php เดียวได้ 2 วิธี:

  1. Combination Syntax - ต่อกันโดยไม่มี Braces
  2. Bracketed Syntax - ใช้ Curly Braces กำหนดขอบเขต

1. Combination Syntax

ประกาศ Namespace ติดกัน Resources ใน Namespace แรกใช้ได้จนกว่าจะเจอ Declaration ตัวถัดไป ใช้ use เพื่อทำให้ Namespace ไหนเป็น Current:

<?php
namespace myspace1;
function hello() {
    echo "Hello World from space1\n";
}
echo "myspace1: ";
hello();

namespace myspace\space2;
function hello() {
    echo "Hello World from space2\n";
}
echo "myspace2: ";
hello();

use myspace1;
hello();  // เรียก myspace1\hello()

use myspace2;
hello();  // เรียก myspace2\hello()
?>

ผลลัพธ์

myspace1: Hello World from space1
myspace2: Hello World from space2
Hello World from space2
Hello World from space2

2. Bracketed Syntax (แนะนำ)

ใช้ Curly Braces กำหนด Scope ชัดเจน:

<?php
namespace myspace1 {
    function hello() {
        echo "Hello World from space1\n";
    }
    echo "myspace1: ";
    hello();
}

namespace myspace\space2 {
    function hello() {
        echo "Hello World from space2\n";
    }
    echo "myspace2: ";
    hello();
}
?>

ผลลัพธ์

myspace1: Hello World from space1
myspace2: Hello World from space2

ข้อแนะนำและข้อจำกัด

  • แนะนำ Bracketed Syntax - อ่านง่าย Scope ชัดเจน
  • ห้ามผสมผสาน Bracketed และ Unbracketed ในไฟล์เดียวกัน
  • Global Code - นอก Braces ได้แค่ declare statement เท่านั้น
  • รวม Global + Named Namespace - ต้องใช้ Bracketed Syntax เท่านั้น

ตัวอย่าง Global + Named (Bracketed Only)

<?php
namespace {
    // Global code
    function globalFunc() { echo "Global\n"; }
}

namespace MyApp {
    function appFunc() { echo "App\n"; }
    globalFunc();  // เรียก Global Function
}
?>

Best Practice

ในโปรเจกต์จริง ควร 1 File = 1 Namespace = 1 Class ตาม PSR-4 ใช้ Composer Autoloader ไม่ควรใส่ Multiple Namespaces ในไฟล์เดียวกัน