Menu
CoddyTech

类中的常量

本课属于 Coddy PHP 学习旅程的“面向对象编程”单元。第 16 课,共 91 课。

有时,你需要在类中使用永远不会改变的值。类常量可以用来定义固定值,这些值在所有实例中都保持不变,并且声明后无法修改。

你可以在类内部使用 const 关键字来定义常量。按照惯例,常量名使用大写字母:

<?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();

输出:

78.53975

和静态属性一样,常量属于类,而不是单个对象。你可以在类内部使用 self::CONSTANT_NAME 访问它们,也可以在类外部使用 ClassName::CONSTANT_NAME 访问:

<?php
class HttpStatus {
    const OK = 200;
    const NOT_FOUND = 404;
    const SERVER_ERROR = 500;
}

echo HttpStatus::OK . "\n";
echo HttpStatus::NOT_FOUND;

输出:

200
404

要点:与静态属性不同,常量一经定义就不能更改。它们非常适合用于在整个应用程序中保持不变的值,例如配置值、状态码或数学常量。

challenge icon

挑战

简单

让我们构建一个温度转换工具,使用类常量存储不会改变的固定转换值。

你将创建两个文件来组织代码:

  • Temperature.php:定义一个处理温度转换的 Temperature 类。这个类应有三个常量:FREEZING_POINT_C 的值设为 0,BOILING_POINT_C 的值设为 100,CONVERSION_FACTOR 的值设为 1.8(用于将摄氏温度转换为华氏温度)。添加一个 public $celsius 属性,以及一个用于接收并设置摄氏温度值的构造函数。添加一个 toFahrenheit() 方法,使用公式 (celsius * CONVERSION_FACTOR) + 32 将存储的摄氏温度转换为华氏温度。再添加一个 getStatus() 方法:如果温度等于冰点常量,则返回 "Freezing";如果等于沸点常量,则返回 "Boiling";否则返回 "Normal"。
  • main.php:引入 Temperature 类文件。创建三个 Temperature 对象,值分别为 0、100 和 25。对于每个温度,在同一行先打印华氏温度转换结果,再打印状态,格式如下:"[fahrenheit]F - [status]"。每个温度各占一行。打印完这三个温度后,直接从类中访问 BOILING_POINT_C 常量(使用 Temperature::BOILING_POINT_C),并在新的一行打印它。

请记住,在类内部使用 self::CONSTANT_NAME 访问常量,在类外部使用 ClassName::CONSTANT_NAME 访问常量。与属性不同,访问常量时不使用 $ 符号。

亲手试试

<?php

require_once 'Temperature.php';

// TODO:创建 3 个 Temperature 对象,值分别为 0、100 和 25

// TODO:按以下格式打印每个温度:“[fahrenheit]F - [status]”
// 每个温度单独占一行

// TODO:直接通过类访问并打印 BOILING_POINT_C 常量
// 使用 ClassName::CONSTANT_NAME 语法

?>
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

面向对象编程中的所有课

自己练习: PHP 在线编译器