Giới thiệu
PHP cho phép một định danh trong lớp được định nghĩa với giá trị hằng số, giá trị không thay đổi trên cơ sở mỗi lớp. Để phân biệt với biến hoặc thuộc tính trong lớp, tên hằng số không có tiền tố $ và được định nghĩa với từ khóa const.
Độ hiển thị mặc định của hằng số là public, mặc dù các modifier khác có thể dùng trong định nghĩa. Giá trị hằng số phải là biểu thức nhất định (constant expression) và không phải biến, lời gọi hàm, hay thuộc tính. Giá trị hằng số được truy cập qua tên lớp sử dụng toán tử phân giải phạm vi (::). Bên trong phương thức, có thể tham chiếu qua biến self.
Cú pháp
class SomeClass {
const CONSTANT = 'constant value';
}
echo SomeClass::CONSTANT;
Tên hằng số phân biệt chữ hoa/thường. Theo quy ước, tên hằng số viết hoa toàn bộ.
Ví dụ: Hằng số lớp cơ bản
<?php
class square {
const PI = M_PI;
var $side = 5;
function area() {
$area = $this->side ** 2 * self::PI;
return $area;
}
}
$s1 = new square();
echo "PI=" . square::PI . "\n";
echo "area=" . $s1->area();
?>
Kết quả
PI=3.1415926535898 area=78.539816339745
Hằng số lớp là biểu thức (Expression)
Hằng số có thể gán bằng biểu thức:
<?php
const X = 22;
const Y = 7;
class square {
const PI = X / Y;
var $side = 5;
function area() {
$area = $this->side ** 2 * self::PI;
return $area;
}
}
$s1 = new square();
echo "PI=" . square::PI . "\n";
echo "area=" . $s1->area();
?>
Kết quả
PI=3.1428571428571 area=78.571428571429
Modifier độ hiển thị hằng số
<?php
class example {
const X = 10;
private const Y = 20;
}
$s1 = new example();
echo "public=" . example::X . "\n";
echo "private=" . $s1->Y . "\n"; // Lỗi: Undefined property
echo "private=" . example::Y . "\n"; // Lỗi: Cannot access private const
?>
Kết quả
public=10 PHP Notice: Undefined property: example::$Y PHP Fatal error: Uncaught Error: Cannot access private const example::Y
Lưu ý: Hằng số private không thể truy cập từ bên ngoài lớp, cũng không thể truy cập qua $this->Y vì hằng số không có tiền tố $.