Menu
CoddyTech

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.53975

Giố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.

challenge icon

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ớp Temperature để 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ành 0, BOILING_POINT_C được đặt thành 100 và CONVERSION_FACTOR được đặt thành 1.8 (dùng để chuyển đổi từ độ C sang độ F). Thêm thuộc tính public $celsius và hàm khởi tạo nhận rồi đặt giá trị độ C. Thêm phương thức toFahrenheit() để 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ức getStatus() để 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, 100 và 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_C từ lớp (bằng cách dùng Temperature::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

?>
quiz iconTự kiểm tra

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

Tự luyện tập: Trình biên dịch PHP online