คุณสมบัติใหม่ที่สำคัญใน PHP 5.3 คือเนมสเปซ
คุณลักษณะนี้เสนอใน PHP5.0x แต่ถูกยกเลิกในภายหลังและมีกำหนดจะใช้งานใน PHP6 และในครั้งนี้ PHP5.3 ได้เปิดตัว "ก่อนกำหนด" อีกครั้ง ซึ่งแสดงให้เห็นว่านักพัฒนาให้ความสำคัญอย่างยิ่งกับมันและระมัดระวัง
เมื่อเผยแพร่อย่างเป็นทางการ เนื้อหาของเอกสารอาจล้าสมัย (เอกสารอาจล้าสมัย) ดังนั้นนี่คือคำอธิบายโดยย่อเกี่ยวกับการใช้เนมสเปซ: ขั้นแรก ให้ประกาศเนมสเปซและเพิ่มเนมสเปซคำหลักใหม่ ซึ่งควรอยู่ที่ จุดเริ่มต้นของคลาสไฟล์
<?phpnamespace Project::Module;class User {const STATUS_OK = true;function register($data) {...}...} จากนั้นในคอนโทรลเลอร์ (อาจเป็นไฟล์อื่น) คุณสามารถเรียก
$ user = new like this Project::Module::User();$user->register($register_info); ย่อมเหมือนกับปกติ แต่เราสามารถเชื่อมต่อคลาสอิสระสองคลาสได้ ตัวอย่างเช่น
Project::Module::User;Project::Module::Blog; ทำให้ง่ายต่อการอธิบายและทำความเข้าใจความสัมพันธ์ระหว่างตัวแปรและคลาสจากภาษานั้น ๆ ดังนั้นจึงหลีกเลี่ยงวิธีการตั้งชื่อที่ยาว "แบบดั้งเดิม" ของ Project_Module_Blog
คำอธิบายข้างต้นอาจอธิบายได้ยากถึงประโยชน์ของการใช้เนมสเปซ การใช้ที่เพิ่มเข้ามาใหม่และเนื่องจากคีย์เวิร์ดอาจอธิบายปัญหาได้ดีขึ้น การใช้และคำสั่ง as สามารถอ้างอิงและประกาศ "นามแฝง" เนมสเปซได้ ตัวอย่างเช่น โค้ดสำหรับสร้างอินสแตนซ์คลาสในคอนโทรลเลอร์ด้านบนสามารถเขียนได้ดังนี้:
use Project::Module;$user = new Module::User();$user->register($register_info); หรือแม้แต่
ใช้ Project ::Module:: User as ModuleUser;$user = new ModuleUser;$user->register($register_info);ค่าคงที่ในคลาสยังสามารถเข้าถึงได้ผ่านเนมสเปซ ตัวอย่างเช่น STATUS_OK ในคลาสด้านบนสามารถเข้าถึงได้ผ่าน เนมสเปซ
โครงการ::โมดูล::ผู้ใช้: :การเข้าถึง STATUS_OK นอกจากนี้ คุณยังสามารถใช้นามแฝงเพื่อทำให้ "ชื่อตัวแปร" ยาวๆ ดังกล่าว
ใช้ Project::Module::User::STATUS_OK เป็น STATUS_OK;echo STATUS_OK; สิ่งที่เรียกว่า "ไฮเปอร์สเปซ" หมายถึงตัวแปร คลาส และฟังก์ชันที่ไม่มีเนมสเปซที่กำหนด ตัวอย่างเช่น
ฟังก์ชันเช่น function foo() {...} สามารถดำเนินการได้โดยใช้ foo() หรือ ::foo();
สุดท้าย ใช้ฟังก์ชันโหลดอัตโนมัติเพื่อโหลดคลาสในเนมสเปซที่ระบุ ฟังก์ชั่นง่าย ๆ มีดังนี้
function __autoload( $classname ) {$classname = strtolower( $classname );$classname = str_replace( '::', DIRECTORY_SEPARATOR, $classname );require_once( dirname( __FILE__ ) . '/' . $ classname . '.class.php' );} ด้วยวิธีนี้ การเรียก
__autoload('Project::Module::User'); จะสามารถโหลดไฟล์ Project_Module_User.class.php ได้โดยอัตโนมัติ (ถึงแม้จะดูไม่สะดวกก็ตาม)