Hằng số trong lớp
Thuộc phần Lập trình hướng đối tượng trong hành trình PHP của Coddy. Bài học 16 trên 91.
Đôi khi, bạn cần các giá trị trong một lớp và chúng không bao giờ được thay đổi. Hằng số của lớp giúp bạn xác định các giá trị cố định, giữ nguyên ở mọi đối tượng và không thể thay đổi sau khi khai báo.
Bạn định nghĩa hằng số bằng từ khóa const bên trong một lớp. Theo quy ước, tên hằng số được viết bằng chữ in hoa:
<?php
class Circle {
const PI = 3.14159;
public $radius;
public function __construct($radius) {
$this->radius = $radius;
}
public function area() {
return self::PI * $this->radius * $this->radius;
}
}
$circle = new Circle(5);
echo $circle->area();
Đầu ra:
78.53975Giống như thuộc tính tĩnh, hằng số thuộc về lớp chứ không thuộc về từng đối tượng. Bạn truy cập chúng bằng self::CONSTANT_NAME bên trong lớp hoặc ClassName::CONSTANT_NAME từ bên ngoài:
<?php
class HttpStatus {
const OK = 200;
const NOT_FOUND = 404;
const SERVER_ERROR = 500;
}
echo HttpStatus::OK . "\n";
echo HttpStatus::NOT_FOUND;
Đầu ra:
200
404Điểm chính: Khác với thuộc tính tĩnh, hằng số không thể thay đổi sau khi được định nghĩa. Hằng số phù hợp với những giá trị cần giữ nguyên trong toàn bộ ứng dụng, chẳng hạn như giá trị cấu hình, mã trạng thái hoặc hằng số toán học.
Thử thách
DễHãy tạo một tiện ích chuyển đổi nhiệt độ dùng hằng số của lớp để lưu các giá trị chuyển đổi cố định không bao giờ thay đổi.
Bạn sẽ tạo hai tệp để sắp xếp code:
Temperature.php: Định nghĩa lớpTemperatuređể xử lý việc chuyển đổi nhiệt độ. Lớp này cần có ba hằng số:FREEZING_POINT_Cđược đặt thành0,BOILING_POINT_Cđược đặt thành100vàCONVERSION_FACTORđược đặt thành1.8(dùng để chuyển đổi từ độ C sang độ F). Thêm thuộc tínhpublic $celsiusvà hàm khởi tạo nhận rồi đặt giá trị độ C. Thêm phương thứctoFahrenheit()để chuyển đổi nhiệt độ độ C đã lưu sang độ F bằng công thức:(celsius * CONVERSION_FACTOR) + 32. Thêm phương thứcgetStatus()để trả về"Freezing"nếu nhiệt độ bằng hằng số điểm đóng băng,"Boiling"nếu nhiệt độ bằng hằng số điểm sôi hoặc"Normal"trong các trường hợp khác.main.php: Bao gồm tệp lớp Temperature. Tạo ba đối tượng Temperature với các giá trị0,100và25. Với mỗi nhiệt độ, in kết quả chuyển đổi sang độ F rồi đến trạng thái trên cùng một dòng theo định dạng này:"[fahrenheit]F - [status]". Mỗi nhiệt độ cần nằm trên một dòng riêng. Sau khi in cả ba, truy cập trực tiếp hằng sốBOILING_POINT_Ctừ lớp (bằng cách dùngTemperature::BOILING_POINT_C) và in hằng số này trên một dòng mới.
Lưu ý rằng bạn truy cập hằng số bằng self::CONSTANT_NAME bên trong lớp và ClassName::CONSTANT_NAME từ bên ngoài. Khác với thuộc tính, hằng số không dùng ký hiệu $ khi được truy cập.
Tự làm thử
<?php
require_once 'Temperature.php';
// TODO: Tạo ba đối tượng Temperature với các giá trị 0, 100 và 25
// TODO: Với mỗi nhiệt độ, in ra theo định dạng: "[fahrenheit]F - [status]"
// Mỗi nhiệt độ trên một dòng riêng
// TODO: Truy cập và in ra hằng số BOILING_POINT_C trực tiếp từ lớp
// Dùng cú pháp ClassName::CONSTANT_NAME
?>Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Lập trình hướng đối tượng
1Nền tảng về OOP
Tệp bên ngoàiGiới thiệu về OOPLớp và đối tượngTừ khóa $thisPhương thứcThuộc tínhHàm khởi tạo (__construct)Hàm hủy (__destruct)Ôn tập: máy tính đơn giản4Kế thừa
Kế thừa cơ bảnTừ khóa parent::Ghi đè phương thứcTừ khóa finalLớp trừu tượngÔn tập: hệ thống phân cấp nhân viên7Đóng gói
Công khai, được bảo vệ, riêng tưTìm hiểu sâu về bộ điều chỉnh quyền truy cậpGetter và setterẨn thông tinRút gọn hàm khởi tạo (8.0)Ôn tập: hệ thống hồ sơ học sinh2Không gian tên và tự động nạp
Giới thiệu về không gian tênTừ khóa useChuẩn tự động nạp PSR-4Trình tự động nạp của ComposerÔn tập: dự án có tổ chức5Giao diện và hợp đồng
Giới thiệu về giao diệnTriển khai giao diệnTriển khai nhiều giao diệnGiao diện và lớp trừu tượngGợi ý kiểu với giao diệnÔn tập: Máy tính hình học8Phương thức ma thuật
Giới thiệu về phương thức ma thuật__toString và __debugInfo__get, __set, __isset, __unset__call và __callStatic__clone và sao chép đối tượng__serialize và __unserializeÔn tập: Bộ sưu tập tùy chỉnh3Thuộc tính của lớp
Thuộc tính instance và staticHằng số trong lớpPhương thức và thuộc tính staticThuộc tính private và protectedThuộc tính chỉ đọc (PHP 8.1)Ôn tập: Trình quản lý tài khoản ngân hàng6Đa hình
Xem lại việc ghi đè phương thứcĐa hình qua giao diệnGợi ý kiểu và kiểu hợpLiên kết tĩnh muộnÔn tập: bộ xử lý thanh toánTự luyện tập: Trình biên dịch PHP online