PHP MetaData
Một trong những điểm ưa thích ở .NET là Meta Data
. Nhưng công việc phải làm lại là PHP
. Và nếu được dùng Meta Data cho PHP sẽ giải quyết được khá là nhiều vấn đề.
Sau một thời gian tìm hiểu thì cũng có người đưa ra giải pháp
. Trong PHP không có cơ chế định nghĩa meta data cụ thể, tuy nhiên thay vào đó lại có phpDoc comment và thư viện Reflection của PHP hổ trợ chức năng này.
class DumbClass { /** * Comment block */ public function thing($parameter,$another) { return false; } } $method=new ReflectionMethod('DumbClass','thing'); echo $method->getDocComment(); |
Đoạn code trên sẽ xuất ra phần comment block của hàm thing. Như vậy có thể put thông tin trong các doc comment này và trích xuất ra, xem nó như là meta data.
Tác giả của bài viết này cũng đề nghị đưa ra dùng YAML đề định nghĩa Meta Data. Một đoạn ví dụ như sau :
/** * Sample model * * [[ * table: sample.item * database: default * read_only: false * ]] * */ class Item extends Model { //@ fields /** * [[ * label: Title * type: string * length: 32 * description: Title of the item * validate: * required: true * length: 8-32 * unique: true * ]] */ public $title; /** * [[ * label: URI * type: string * length: 32 * description: URI of the item * validate: * required: true * length: 4-32 * unique: true * format: alpha_numeric * ]] */ public $uri; /** * [[ * label: Description * type: text * description: Description of the item * ]] */ public $description; //@ end fields } |
Trong ví dụ trên, tác giả dùng Meta Data để cài đặt một Data Object Model, cụ thể là định nghĩa trường và các tham số để kiểm tra input khác. Khi đó có thể cài đặt tiếp :
$item=new Item(); $class=AttributeReader::ClassAttributes($item); echo $class->database; echo $class->table; $method=AttributeReader::PropertyAttributes($item,'uri'); echo $method->label; if ($method->validate->required) echo "Required field"; else echo "Not required."; |
Cũng khá là thú vị
Về nhận xét cá nhân thì phần này chỉ là một cách đi vòng và có thể bị “hụt” một xíu về performance. Tuy nhiên nếu biết tận dụng thì phần Comment-Meta-Attribte này cũng sẽ là một kỹ thuật rất hay khi xây dựng một ứng dụng web PHP . Mọi người có thể đọc bài gốc để download các lớp sample về.

