ZetCode

PHP const 关键字

最后修改于 2025 年 4 月 16 日

PHP 的 const 关键字用于在 PHP 中定义常量。常量是不可变的值,在脚本执行期间不能更改。它们提供了一种存储固定值的方法,这些值在整个程序中保持一致。

基本定义

PHP 中的常量是简单值的标识符。与变量不同,常量在整个脚本中自动全局可用。它们默认区分大小写,但可以更改。

const 关键字在编译时定义常量,而 define 在运行时定义常量。常量只能包含标量值(布尔、整数、浮点数、字符串)或数组。

语法:const CONSTANT_NAME = value;。按照约定,常量名应该大写。它们不像变量那样使用 $ 前缀。

基本常量声明

此示例演示了声明和使用常量的最简单方法。

basic_const.php
<?php

declare(strict_types=1);

const PI = 3.14159;

echo "The value of PI is: " . PI;

代码声明了一个名为 PI 的常量,其值为 3.14159。常量通过其名称直接访问,无需 $ 符号。声明后,值不能更改。这对于数学常量很有用。

类常量

此示例展示了如何使用 const 在类中定义常量。

class_const.php
<?php

declare(strict_types=1);

class MathOperations {
    const PI = 3.14159;
    const EULER = 2.71828;
    
    public function getPi() {
        return self::PI;
    }
}

echo "PI value: " . MathOperations::PI . "\n";
echo "Euler's number: " . MathOperations::EULER . "\n";

$math = new MathOperations();
echo "From method: " . $math->getPi();

该代码在 MathOperations 类中定义了两个常量。类常量使用范围解析运算符 (::) 访问。也可以使用 self:: 从类方法内部访问它们。类常量对于特定于类的值很有用。

常量数组

此示例演示了在 PHP 中将 const 与数组值一起使用。

array_const.php
<?php

declare(strict_types=1);

const COLORS = [
    'RED' => '#FF0000',
    'GREEN' => '#00FF00',
    'BLUE' => '#0000FF'
];

echo "Red hex code: " . COLORS['RED'] . "\n";
echo "All colors:\n";
print_r(COLORS);

代码声明了一个包含颜色十六进制代码的常量数组。可以像常规数组一样访问数组常量。这对于存储一组固定的相关值很有用。声明后,数组不能修改。

命名空间常量

此示例展示了如何在命名空间中定义和使用常量。

namespace_const.php
<?php

declare(strict_types=1);

namespace MyApp\Config;

const DB_HOST = 'localhost';
const DB_USER = 'admin';
const DB_PASS = 'secret';

function connect() {
    echo "Connecting to " . DB_HOST . " as " . DB_USER;
}

namespace MyApp;

use const MyApp\Config\DB_HOST;

echo "Database host: " . Config\DB_HOST . "\n";
echo "Using imported constant: " . DB_HOST . "\n";
Config\connect();

代码在 MyApp\Config 命名空间中定义了常量。可以使用其完全限定名称访问常量,或者使用 use const 导入。这有助于在大型应用程序中组织常量。命名空间常量可防止命名冲突。

魔术常量

此示例演示了 PHP 的内置魔术常量与 const 一起使用。

magic_const.php
<?php

declare(strict_types=1);

class MagicDemo {
    public function showInfo() {
        echo "Line: " . __LINE__ . "\n";
        echo "File: " . __FILE__ . "\n";
        echo "Class: " . __CLASS__ . "\n";
        echo "Method: " . __METHOD__ . "\n";
    }
}

const CURRENT_DIR = __DIR__;

echo "Current directory: " . CURRENT_DIR . "\n";
echo "Namespace: " . __NAMESPACE__ . "\n";

$demo = new MagicDemo();
$demo->showInfo();

代码使用 PHP 的魔术常量,这些常量根据它们的使用位置而变化。这些常量提供有关脚本执行上下文的信息。我们可以将它们分配给常规常量,以便于使用。魔术常量在 PHP 中始终可用。

常量表达式

此示例展示了如何在常量声明中使用表达式。

expression_const.php
<?php

declare(strict_types=1);

const SECONDS_IN_MINUTE = 60;
const SECONDS_IN_HOUR = 60 * SECONDS_IN_MINUTE;
const SECONDS_IN_DAY = 24 * SECONDS_IN_HOUR;

function formatDuration(int $seconds) {
    $days = floor($seconds / SECONDS_IN_DAY);
    $remaining = $seconds % SECONDS_IN_DAY;
    
    $hours = floor($remaining / SECONDS_IN_HOUR);
    $remaining %= SECONDS_IN_HOUR;
    
    $minutes = floor($remaining / SECONDS_IN_MINUTE);
    $seconds = $remaining % SECONDS_IN_MINUTE;
    
    return sprintf("%d days, %d hours, %d minutes, %d seconds", 
        $days, $hours, $minutes, $seconds);
}

echo "One day has " . SECONDS_IN_DAY . " seconds\n";
echo formatDuration(123456);

代码演示了常量表达式,其中常量可以根据其他常量定义。这创建了相关常量的层次结构。表达式在编译时求值。这对于不应更改的派生值很有用。

接口常量

此示例展示了如何在接口中定义和使用常量。

interface_const.php
<?php

declare(strict_types=1);

interface HttpStatus {
    const OK = 200;
    const NOT_FOUND = 404;
    const SERVER_ERROR = 500;
}

class Response implements HttpStatus {
    public static function getStatusMessage(int $code): string {
        switch ($code) {
            case self::OK:
                return "OK";
            case self::NOT_FOUND:
                return "Not Found";
            case self::SERVER_ERROR:
                return "Internal Server Error";
            default:
                return "Unknown Status";
        }
    }
}

echo "Status 200: " . Response::getStatusMessage(HttpStatus::OK) . "\n";
echo "Status 404: " . Response::getStatusMessage(HttpStatus::NOT_FOUND);

代码定义了一个带有 HTTP 状态码常量的接口。实现该接口的类可以访问这些常量。接口常量提供了一种在类之间共享通用值的方法。它们有助于在实现之间保持一致性。

最佳实践

来源

PHP 常量文档

本教程涵盖了 PHP 常量,并提供了实际示例,展示了 const 在各种场景中的使用,包括类、命名空间和接口。

作者

我叫 Jan Bodnar,是一位充满激情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我拥有超过十年的编程教学经验。

列出 所有 PHP 教程