类中的常量
本课属于 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要点:与静态属性不同,常量一经定义就不能更改。它们非常适合用于在整个应用程序中保持不变的值,例如配置值、状态码或数学常量。
挑战
简单让我们构建一个温度转换工具,使用类常量存储不会改变的固定转换值。
你将创建两个文件来组织代码:
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 语法
?>这节课包含一个小测验。开始学习即可作答,并记录你的进度。
面向对象编程中的所有课
自己练习: PHP 在线编译器