Cả hai đều khai báo hằng số, nhưng có khác biệt quan trọng:
- Thời điểm định nghĩa:
consttại compile-time,define()tại runtime. - Trong khối điều kiện:
constkhông dùng được trongif(),define()được. - Giá trị cho phép:
constchỉ nhận scalar tĩnh (số, chuỗi, hằng khác).define()chấp nhận biểu thức bất kỳ. - Phân biệt chữ hoa/thường:
constluôn case-sensitive.define()có tham số thứ 3trueđể case-insensitive. - Trong lớp:
constdùng được trong class/interface (hằng lớp).define()không thể dùng trong class.
Ví dụ trong lớp
<?php
class Abc {
const VAR = 2; // hợp lệ
echo self::VAR;
}
class Xyz {
define('XUV', 2); // lỗi: không dùng define() trong class
}
?>