Hằng số Magic trong PHP là các hằng số được định nghĩa trước trong PHP được thay đổi trên cơ sở sử dụng của chúng. Chúng bắt đầu bằng dấu gạch dưới kép và kết thúc bằng dấu gạch dưới kép (__).
Chúng tương tự như các hằng số được định nghĩa trước khác nhưng giá trị của chúng được thay đổi theo ngữ cảnh, nên chúng được gọi là hằng số magic.
Có tám hằng số magic được định nghĩa trong bảng dưới đây. Chúng phân biệt chữ hoa chữ thường.
Name | Description |
---|---|
__LINE__ | Đại diện cho số dòng hiện tại nơi nó được sử dụng. |
__FILE__ | Đại diện cho đường dẫn đầy đủ và tên file của file. Nếu nó được sử dụng bên trong một file khác bằng từ khóa include, nó trả về tên của file được include. |
__DIR__ | Biểu diễn đường dẫn thư mục đầy đủ của file. Tương đương với dirname(__ file__). Nó không có dấu gạch chéo trừ khi nó là một thư mục gốc. |
__FUNCTION__ | Đại diện cho tên hàm nơi nó được sử dụng. Trả về blank khi nó không được sử dụng bên trong hàm nào. |
__CLASS__ | Đại diện cho tên lớp nơi nó được sử dụng. Trả về blank khi nó không được sử dụng bên trong lớp nào. |
__TRAIT__ | Trả về tên của đặc tính nơi mà nó được sử dụng. Trả về blank khi nó được sử dụng bên ngoài hàm. Nó bao gồm namespace được khai báo bên trong. |
__METHOD__ | Đại diện cho tên của phương thức lớp mà nó được sử dụng. Tên phương thức được trả về khi nó được khai báo. |
__NAMESPACE__ | Đại diện cho tên của namespace hiện tại. |
Nội dung chính
Ví dụ hằng số magic trong PHP
File: hang-so-magic.php
<?php echo "<h3>Ví dụ hằng số PHP __LINE__</h3>"; echo "Bạn đang ở dòng số " . __LINE__ . "<br><br>"; echo "<h3>Ví dụ hằng số PHP __FILE__</h3>"; echo __FILE__ . "<br><br>"; echo "<h3>Ví dụ hằng số PHP __DIR__</h3>"; echo __DIR__ . "<br><br>"; echo dirname(__FILE__) . "<br><br>"; echo "<h3>Ví dụ hằng số PHP __FUNCTION__</h3>"; // sử dụng hằng số magic bên trong hàm. function cash(){ echo 'Tên của hàm là: '. __FUNCTION__ . "<br><br>"; } cash(); // sử dụng hằng số magic bên ngoài hàm. function test_function(){ echo 'Hi'; } test_function(); echo __FUNCTION__ . "<br><br>";// trả về blank echo "<h3>Ví dụ hằng số PHP __CLASS__</h3>"; class abc { public function __construct() { ; } function abc_method(){ echo __CLASS__ . "<br><br>";// in tên của lớp abc. } } $t = new abc; $t->abc_method(); class first{ function test_first(){ echo __CLASS__;//in lớp cha first } } class second extends first { public function __construct() { ; } } $t = new second; $t->test_first(); echo "<h3>Ví dụ hằng số PHP __TRAIT__</h3>"; trait created_trait{ function abc(){ echo __TRAIT__;//in tên của trait là created_trait } } class anew{ use created_trait; } $a = new anew; $a->abc(); echo "<h3>Ví dụ hằng số PHP __METHOD__</h3>"; class meth{ public function __construct() { echo __METHOD__ . "<br><br>";//in meth::__construct } public function meth_fun(){ echo __METHOD__;//in meth::meth_fun } } $a = new meth; $a->meth_fun(); echo "<h3>Ví dụ hằng số PHP __NAMESPACE__</h3>"; class name{ public function __construct() { echo 'Dòng này sẽ được in khi gọi namespace'; } } $clas_name = __NAMESPACE__ .'\name'; $a = new $clas_name; ?>
Kết quả: