Hằng là một kiểu biến, chứa dữ liệu trong PHP. Giá trị này không thể thay đổi và không thể xóa (unset). Hằng thường được viết hoa. Hằng có giá trị toàn cục (global scope).
Để gọi danh sách hằng dùng hàm get_defined_constants(), gía trị trả về là array cho biết tất cả các hằng hiện có.
Syntax của hằng
Có hai cách thiết lập hằng:
Cách 1: define(‘HẰNG’, ‘giá trị của hằng’);
Cả ‘HẰNG’ và ‘Giá trị của hằng’ nếu là string phải đặt trong ngoặc đơn hoặc kép, nếu là integer thì không cần.
Ví dụ:
define ('VIETPHP' , 'Học PHP chuyên sâu bằng cách thực hành');
Khi echo VIETPHP; ta có được giá trị ‘Học PHP chuyên sâu bằng cách thực hành’.
Cách 2: const VIETPHP = ‘Cách tạo hằng thứ hai’;
Cách thứ hai này không yêu cầu tên hằng phải đặt trong ngoặc đơn hoặc kép.
Vì hằng có giá trị toàn cục và không xóa được nên khi hằng trùng tên thì báo lỗi ngay.
Sự khác biệt giữa cách define và const
Mặc dù giá trị của hằng là không thay đổi, nhưng khi ta gán giá trị của hằng là biến, thì khi biến thay đổi hằng cũng thay đổi theo.
Ví dụ:
$a = 'giá trị của hằng là biến ABC'; define('XYZ', $a); echo XYZ; // Kết quả là 'giá trị của hằng là biến ABC' $a = 'Giá trị mới của a'; echo XYZ; // Kết quả vẫn là 'giá trị của hằng là biến ABC'
Như vậy, dù ta update giá trị của biến $a thì hằng XYZ vẫn không đổi.
Tuy nhiên, vì $a trong define (‘XYZ’, $a) là một biến, nên nếu như trước khi tạo hằng, ta thay đổi giá trị của biến này thì giá trị của hằng cũng thay đổi.
$a = 'giá trị của hằng là biến ABC'; define('XYZ', $a); echo XYZ; // Kết quả là 'giá trị của hằng là biến ABC' //sửa giá trị của $a một tẹo $a = 'giá trị của hằng là biến ABC- cập nhật'; define('XYZ', $a); echo XYZ; // Kết quả là 'giá trị của hằng là biến ABC cập nhật'
Ta ngược lại, không thể thực hiện việc tạo giá trị động cho hằng như cách trên khi dùng cú pháp
const ABC = $a; // lỗi ngay :-)
Tên hằng là CASE-SENSITIVE
Nói cách khác define (‘ABC’, ‘value’) khác với define (‘aBC’, ‘value’);
Một chú ý nữa, có hai cách echo giá trị của hằng là:
define ('ABC', 'hằng mới tạo'); echo ABC; echo constant("ABC"); // same thing as the previous line, chú ý ngoặc kép trong dấu ()
Để xác định một hằng đã có hay chưa, ta dùng hàm defined(). Ví dụ:
define('ABC', 'đây là hằng'); if(defined(ABC)){ echo "Hàm ABC đã được định nghĩa"; }else{ echo "Hằng ABC chưa được định nghĩa"; } Kết quả, Hàm ABC đã được định nghĩa
Đọc chú ý sau trong PHP document: If you want to see if a variable exists, use isset() as defined() only applies to constants. If you want to see if a function exists, use function_exists().
Như vậy isset() dùng để “tra xét” giá trị của biến có tồn tại hay không, defined() dành cho hằng còn function_exists() dành cho hàm.
Chú ý là các hàm này sẽ trả về dạng BOOLEAN tức TRUE hoặc FALSE 🙂
Leave a Reply