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 .
Có 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 (__).
- __LINE__
- __FILE__
- __DIR__
- __FUNCTION__
- __CLASS__
- __TRAIT__
- __METHOD__
- __NAMESPACE__
- 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ản | Sự miêu tả |
5.3.0 | Đã thêm hằng số ma thuật __DIR__ và __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:
Nội dung chính
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:
- Full series tự học PHP từ cơ bản tới nâng cao tại đây nha.
- Ebook về PHP tại đây.
- Các nguồn kiến thức MIỄN PHÍ VÔ GIÁ từ cafedev tại đây
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!