บทนำ
เมื่อ PHP Parser เจอ Unqualified Identifier (Class/Function Name ไม่มี Namespace) จะ Resolve เป็น Current Namespace ดังนั้นเพื่อเข้าถึง Built-in Classes ของ PHP ต้องใช้ Fully Qualified Name โดยเติม \ หน้าชื่อ
ใช้ Built-in Class (เช่น stdClass)
<?php
namespace testspace;
class testclass extends \stdClass {
// ใช้ \stdClass เพื่อระบุ Global Class
}
$obj = new testclass();
$obj->name = "Raju";
echo $obj->name;
?>
Included Files และ Global Namespace
Included Files จะ Default อยู่ใน Global Namespace ดังนั้นต้องเติม \ เพื่อเข้าถึง Class จาก Included File:
test1.php
<?php
class myclass {
function hello() { echo "Hello World\n"; }
}
?>
test2.php (Include ใน Namespace อื่น)
<?php
include 'test1.php';
namespace testspace {
class testclass extends \myclass {
function hello() {
echo "Hello PHP\n";
}
}
$obj1 = new \myclass();
$obj1->hello();
$obj2 = new testclass();
$obj2->hello();
}
?>
ผลลัพธ์
Hello World Hello PHP
สรุปกฎการเข้าถึง Global Classes
| สถานการณ์ | Syntax | ตัวอย่าง |
|---|---|---|
| Built-in Classes (stdClass, Exception, DateTime, etc.) | \ClassName | new \DateTime() |
| Classes จาก Included File (Global) | \ClassName | new \ExternalClass() |
| Global Functions (strlen, array_map, etc.) | \functionName() | \strlen($str) |
| Global Constants (PHP_VERSION, etc.) | \CONSTANT_NAME | \PHP_VERSION |
Best Practice
- ใช้
use functionและuse constสำหรับ Global Functions/Constants ที่ใช้บ่อย - ใน Modern PHP (Framework) มักจะไม่เขียน Global Code เลย ทุกอย่างอยู่ใน Namespace
- ถ้าใช้ Global Class บ่อย ให้ Import ด้วย
use \DateTime;แล้วใช้new DateTime()ได้เลย