ในการเขียนโปรแกรมระดับสูง (Advanced Programming) บางครั้งเราจำเป็นต้อง “ส่อง” เข้าไปในโครงสร้างของคลาส (Class) เพื่อดูว่ามีเมธอด (Method) อะไรบ้าง มีคุณสมบัติ (Property) ตัวไหน หรือแม้กระทั่งเรียกใช้งานฟังก์ชันที่เป็น Private ในขณะที่โปรแกรมกำลังทำงานอยู่ สิ่งเหล่านี้คือความสามารถของ Reflection API ใน PHP ครับ
Reflection API คืออะไร?
Reflection คือความสามารถในการทำ Introspection หรือการที่โปรแกรมสามารถตรวจสอบโครงสร้างของตัวเองได้ในขณะรันไทม์ (Runtime) ซึ่งฟีเจอร์นี้เป็นหัวใจสำคัญของเฟรมเวิร์กชื่อดังอย่าง Laravel หรือ Symfony ที่ใช้ในการทำ Dependency Injection และการสร้างระบบ Automation ต่าง ๆ ครับ
1. การตรวจสอบโครงสร้างเบื้องต้นด้วย ReflectionClass
เราสามารถใช้ ReflectionClass เพื่อดึงข้อมูลพื้นฐานของคลาส เช่น รายชื่อเมธอด หรือคุณสมบัติต่างๆ ออกมาแสดงผลได้ดังนี้ครับ:
PHP
class User {
public $name;
private $password;
public function login() {}
}
$reflection = new ReflectionClass('User');
// ดึงรายชื่อ Public Methods ทั้งหมด
$methods = $reflection->getMethods(ReflectionMethod::IS_PUBLIC);
foreach ($methods as $method) {
echo "Method name: " . $method->getName() . "\n";
}