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

การเข้าถึง Global Classes ใน PHP Namespaces

บทนำ

เมื่อ 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.)\ClassNamenew \DateTime()
Classes จาก Included File (Global)\ClassNamenew \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() ได้เลย