PHP เนมสเปซ
PHP เนมสเปซ
เนมสเปซเป็นตัวระบุที่แก้ปัญหาสองประการที่แตกต่างกัน:
- ช่วยให้จัดระเบียบได้ดีขึ้นด้วยการจัดกลุ่มชั้นเรียนที่ทำงานร่วมกันเพื่อดำเนินงาน
- อนุญาตให้ใช้ชื่อเดียวกันได้มากกว่าหนึ่งคลาส
ตัวอย่างเช่น คุณอาจมีชุดของชั้นเรียนที่อธิบายตาราง HTML เช่น Table, Row และ Cell ในขณะที่ยังมีชุดของชั้นเรียนอื่นๆ เพื่ออธิบายเฟอร์นิเจอร์ เช่น Table, Chair และ Bed สามารถใช้เนมสเปซเพื่อจัดระเบียบคลาสออกเป็นสองกลุ่มที่แตกต่างกัน ในขณะที่ยังป้องกันไม่ให้ตารางและตารางทั้งสองคลาสรวมกัน
การประกาศเนมสเปซ
เนมสเปซถูกประกาศที่จุดเริ่มต้นของไฟล์โดยใช้namespace
คำสำคัญ:
ไวยากรณ์
ประกาศเนมสเปซชื่อ Html:
namespace Html;
หมายเหตุ:การnamespace
ประกาศจะต้องเป็นสิ่งแรกในไฟล์ PHP รหัสต่อไปนี้จะไม่ถูกต้อง:
<?php
echo "Hello World!";
namespace Html;
...
?>
ค่าคงที่ คลาส และฟังก์ชันที่ประกาศในไฟล์นี้จะเป็นของ เนมสเปซ Html :
ตัวอย่าง
สร้างคลาสตารางในเนมสเปซ Html:
<?php
namespace Html;
class Table {
public $title = "";
public
$numRows = 0;
public function message() {
echo "<p>Table
'{$this->title}' has {$this->numRows} rows.</p>";
}
}
$table = new
Table();
$table->title = "My table";
$table->numRows = 5;
?>
<!DOCTYPE html>
<html>
<body>
<?php
$table->message();
?>
</body>
</html>
สำหรับการจัดระเบียบเพิ่มเติม เป็นไปได้ที่จะมีเนมสเปซที่ซ้อนกัน:
ไวยากรณ์
ประกาศเนมสเปซชื่อ Html ภายในเนมสเปซชื่อ Code:
namespace Code\Html;
การใช้เนมสเปซ
โค้ดใดๆ ที่ตามหลังการnamespace
ประกาศกำลังทำงานอยู่ในเนมสเปซ ดังนั้นคลาสที่เป็นของเนมสเปซสามารถสร้างอินสแตนซ์ได้โดยไม่มีตัวระบุใดๆ ในการเข้าถึงคลาสจากภายนอกเนมสเปซ คลาสต้องมีเนมสเปซแนบอยู่
ตัวอย่าง
ใช้คลาสจากเนมสเปซ Html:
$table = new Html\Table()
$row = new Html\Row();
เมื่อใช้หลายคลาสจากเนมสเปซเดียวกันพร้อมกัน จะง่ายกว่าที่จะใช้namespace
คีย์เวิร์ด:
ตัวอย่าง
ใช้คลาสจากเนมสเปซ Html โดยไม่ต้องใช้ Html\qualifier:
namespace Html;
$table = new Table();
$row = new Row();
เนมสเปซนามแฝง
การตั้งชื่อแทนให้กับเนมสเปซหรือคลาสเพื่อให้เขียนง่ายขึ้นอาจเป็นประโยชน์ เสร็จสิ้นด้วยuse
คำสำคัญ:
ตัวอย่าง
ตั้งชื่อนามแฝงให้กับเนมสเปซ:
use Html as H;
$table = new H\Table();
ตัวอย่าง
ให้นามแฝงแก่ชั้นเรียน:
use Html\Table as
T;
$table = new T();