2012-03-16 23 views
18

Tôi muốn có thể triển khai các chú thích tùy chỉnh trong các đối tượng PHP5 của mình và tôi muốn tìm hiểu cách toàn bộ quá trình hoạt động bằng cách tạo trình phân tích cú pháp của riêng tôi.Cách tìm chú thích trong đối tượng PHP5?

Để bắt đầu, tuy nhiên, tôi cần biết cách tìm các chú thích.

Có phương pháp phản chiếu nào bị thiếu hoặc có cách nào khác không?

Ví dụ, tôi muốn để có thể tìm thấy những chú thích sau đây trong một lớp học:

/** 
* @MyParam: myvalue 
*/ 
+0

có thể trùng lặp của http://stackoverflow.com/search?q=annotation+parser+php – Gordon

+1

Tại sao không sử dụng thư viện như chú thích về học thuyết? – leyou

Trả lời

41

Bạn có thể làm điều này bằng ReflectionClass::getDocComment, ví dụ:

function getClassAnnotations($class) 
{  
    $r = new ReflectionClass($class); 
    $doc = $r->getDocComment(); 
    preg_match_all('#@(.*?)\n#s', $doc, $annotations); 
    return $annotations[1]; 
} 

Live Demo: http://codepad.viper-7.com/u8bFT4

+0

Nếu có nhiều ý kiến ​​trong tập tin, nó sẽ lấy tất cả? – johnnietheblack

+0

'-> getDocComment()' chỉ nhận được chú thích doc liên kết với đối tượng bạn đang kiểm tra (chú thích docblock ngay trước tuyên bố của điều đó). Bạn cũng có thể nhận được các chú thích doc trên các đối tượng, các lớp, các phương thức, các hàm và các thuộc tính. – MightyE

+2

@johnnietheblack bạn có thể sử dụng http://php.net/manual/pl/class.reflectionmethod.php - để lấy bình luận chỉ cho phương pháp đã chỉ định. – Slawek

8

Bạn có thể lấy khối bình luận sử dụng phương pháp đối tượng getDocComment Reflection.

Nếu bạn không muốn lấy chú thích bằng tay, bạn có thể sử dụng Zend Framework Reflection hay giải pháp khác hiện có

+0

['doctrine/annotations'] (https://github.com/doctrine/annotations) là phổ biến nhất – DanFromGermany

Các vấn đề liên quan