Hằng số ma thuật là các hằng số đã được PHP khai báo từ trước và giá trị của nó được thay đổi dựa trên việc sử dụng 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 khai báo khác nhưng giá trị của chúng theo ngữ cảnh, chúng được gọi là hằng số ma thuật .

chín hằng số ma thuật trong PHP. Trong đó tám hằng số bắt đầu và kết thúc bằng dấu gạch dưới kép (__).

  1. __LINE__
  2. __FILE__
  3. __DIR__
  4. __FUNCTION__
  5. __CLASS__
  6. __TRAIT__
  7. __METHOD__
  8. __NAMESPACE__
  9. ClassName::class

Tất cả các hằng số được xử lý tại thời gian biên dịch thay vì thời gian chạy, không giống như hằng số thông thường. Hằng số ma thuật không phân biệt chữ hoa chữ thường.

Lịch sữ thay đổi

Phiên bảnSự miêu tả
5.3.0Đã thêm hằng số ma thuật  __DIR____NAMESPACE__ 
5.4.0Đã thêm hằng số ma thuật __TRAIT__
5.5.0Đã thêm hằng số ::class

Tất cả các hằng số được khai báo bên dưới với code ví dụ sau:

1. __LINE__

Nó trả về số dòng hiện tại của file, nơi hằng số này được sử dụng.

Thí dụ:

<?php   
    echo "<h3>Example for __LINE__</h3>";    
    // print Your current line number i.e;4     
    echo "You are at line number " . __LINE__ . "<br><br>";  
?>  

Đầu ra:

Example for __LINE__

You are at line number 4

2. __FILE__:

Hằng số ma thuật này trả về đường dẫn đầy đủ của file được thực thi, nơi file được lưu trữ. Nếu nó được sử dụng bên trong file, tên của file được sẽ được trả về.

Thí dụ:

<?php   
    echo "<h3>Example for __FILE__</h3>";    
    //print full path of file with .php extension    
    echo __FILE__ . "<br><br>";  
?>  

Đầu ra:

Example for __FILE__

D:cafedev\xampp\htdocs\program\magic.php

3. __DIR__:

Nó trả về đường dẫn đầy đủ của thư mục chứa file được thực thi. Đường dẫn được trả về bởi hằng số ma thuật này tương đương với dirname (__ FILE__). Hằng số ma thuật này không có dấu gạch chéo trừ khi nó là thư mục gốc.

Thí dụ:

<?php   
    echo "<h3>Example for __DIR__</h3>";    
    //print full path of directory where script will be placed    
    echo __DIR__ . "<br><br>";  
    //below output will equivalent to above one.  
    echo dirname(__FILE__) . "<br><br>";    
?>  

Đầu ra:

Example for __DIR__

D:cafedev\xampp\htdocs\program

D:cafedev\xampp\htdocs\program

4. __FUNCTION__:

Hằng số ma thuật này trả về tên hàm, nơi hằng số này được sử dụng. Nó sẽ trả về trống nếu nó được sử dụng bên ngoài bất kỳ hàm nào.

Thí dụ: 

/*
Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
@author cafedevn
Contact: cafedevn@gmail.com
Fanpage: https://www.facebook.com/cafedevn
Group: https://www.facebook.com/groups/cafedev.vn/
Instagram: https://instagram.com/cafedevn
Twitter: https://twitter.com/CafedeVn
Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
Pinterest: https://www.pinterest.com/cafedevvn/
YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
*/
<?php   
    echo "<h3>Example for __FUNCTION__</h3>";    
    //Using magic constant inside function.    
    function test(){    
        //print the function name i.e; test.   
        echo 'The function name is '. __FUNCTION__ . "<br><br>";   
    }    
    test();    
      
    //Magic constant used outside function gives the blank output.    
    function test_function(){    
        echo 'Cafedev';    
    }    
    test_function();    
    //give the blank output.   
    echo  __FUNCTION__ . "<br><br>";  
?>  

Đầu ra:

Example for __FUNCTION__

The function name is test

Cafedev

5. __CLASS__:

Nó trả về tên lớp, nơi hằng số ma thuật này được sử dụng. Hằng __CLASS__ cũng hoạt động trong các tính trạng.

Thí dụ:

<?php   
    echo "<h3>Example for __CLASS__</h3>";    
    class JTP    
    {    
        public function __construct() {    
            ;    
    }    
    function getClassName(){    
        //print name of the class JTP.   
        echo __CLASS__ . "<br><br>";   
        }    
    }    
    $t = new JTP;    
    $t->getClassName();    
      
    //in case of multiple classes   
    class base  
    {    
    function test_first(){    
            //will always print parent class which is base here.    
            echo __CLASS__;   
        }    
    }    
    class child extends base    
    {    
        public function __construct() {    
            ;    
        }    
    }    
    $t = new child;    
    $t->test_first();    
?>  

Đầu ra:

Example for __CLASS__

JTP

base

6. __TRAIT__:

Hằng số ma thuật này trả về tên đặc điểm, nơi nó được sử dụng.

Thí dụ:

<?php   
    echo "<h3>Example for __TRAIT__</h3>";    
    trait created_trait {    
        function jtp(){    
            //will print name of the trait i.e; created_trait    
            echo __TRAIT__;  
        }    
    }    
    class Company {    
        use created_trait;    
        }    
    $a = new Company;    
    $a->jtp();    
?>  

Đầu ra:

Example for __TRAIT__

created_trait

7. __METHOD__:

Nó trả về tên của phương thức lớp mà hằng số ma thuật này được sử dụng. Tên phương thức được trả về giống như được khai báo.

Thí dụ:

<?php   
    echo "<h3>Example for __METHOD__</h3>";  
    class method {    
        public function __construct() {    
            //print method::__construct    
                echo __METHOD__ . "<br><br>";   
            }    
        public function meth_fun(){    
            //print method::meth_fun    
                echo __METHOD__;   
        }    
    }    
    $a = new method;    
    $a->meth_fun();  
?>  

Đầu ra:

Example for __METHOD__

method:: construct
method:: meth_fun

8. __NAMESPACE__:

Nó trả về không gian tên hiện tại nơi nó được sử dụng.

Thí dụ:

<?php   
    echo "<h3>Example for __NAMESPACE__</h3>";  
    class name {    
        public function __construct() {    
            echo 'This line will print on calling namespace.';     
        }     
    }    
    $class_name = __NAMESPACE__ . '\name';    
    $a = new class_name;   
?>  

Đầu ra:

Example for __NAMESPACE__

This line will print on calling namespace.

9. ClassName :: class:

Hằng số ma thuật này không bắt đầu và kết thúc bằng dấu gạch dưới kép (__). Nó trả về tên đầy đủ của ClassName. ClassName :: class được thêm vào trong PHP 5.5.0 . Nó hữu ích với các lớp có không gian tên.

Thí dụ:

<?php   
    namespace Technical_Portal;  
    echo "<h3>Example for CLASSNAME::CLASS </h3>";  
    class cafedev {    
    }  
    echo cafedev::class;    //ClassName::class   
?> 

Đầu ra:

Example for __NAMESPACE__

This line will print on calling namespace.

Lưu ý: Hãy nhớ rằng không gian tên phải là câu lệnh đầu tiên hoặc sau bất kỳ lệnh gọi khai báo nào trong tập lệnh, nếu không nó sẽ tạo ra lỗi nghiêm trọng.

Cài ứng dụng cafedev để dễ dàng cập nhật tin và học lập trình mọi lúc mọi nơi tại đây.

Tài liệu từ cafedev:

Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của cafedev để nhận được nhiều hơn nữa:

Chào thân ái và quyết thắng!

Đăng ký kênh youtube để ủng hộ Cafedev nha các bạn, Thanks you!