Skip to content

PHP 常量

常量(Constants)是标识符,用于存储在脚本执行期间不会改变的值。一旦定义,其值就保持固定。

常量是简单值的名称(标识符)。与变量不同,赋值给常量的值在定义后不能更改。

有效的常量名以字母或下划线开头,后跟任意数量的字母、数字或下划线。按照惯例,常量名通常用大写字母书写。重要的是,常量名不像变量那样以美元符号 ($) 开头。

注意:默认情况下,常量具有全局作用域(global scope),这意味着它们可以在脚本中的任何位置访问,而无需使用 global 关键字。

在 PHP 中有两种主要的定义常量的方式:

  • 使用 define() 函数:这是传统方法,允许有条件地或在运行时根据名称定义常量。
  • 使用 const 关键字:这是后来引入的方法,通常推荐用于在脚本的顶层或类中定义常量,因为它对于编译时常量来说稍快且更清晰。

define() 函数创建一个命名常量。

语法:

define(string $name, mixed $value)

参数:

  • name: 常量的名称(默认区分大小写)。
  • value: 常量的值。可以是标量值 (scalar values)(int, float, string, bool, null)或数组 (arrays)(PHP 7+ 支持)。

注意:第三个参数 case-insensitive 在旧版本的 PHP 中可用,但在 PHP 7.3 中已弃用,并在 PHP 8.0 中移除。现在常量总是区分大小写。

使用 define() 的示例:

<?php
define("GREETING", "Welcome to Modern PHP!");
echo GREETING; // 输出:Welcome to Modern PHP!
// 定义一个数组常量 (PHP 7+)
define('ALLOWED_LANGUAGES', ['en', 'es', 'fr']);
print_r(ALLOWED_LANGUAGES);
?>

const 关键字提供了更简单的语法来定义常量,尤其是在全局作用域或类内部。

语法(全局作用域):

const CONSTANT_NAME = value;

使用 const 的示例:

<?php
const APP_VERSION = '2.1.0';
echo APP_VERSION; // 输出:2.1.0
const DEFAULT_SETTINGS = [
'theme' => 'dark',
'notifications' => true
];
echo DEFAULT_SETTINGS['theme']; // 输出:dark
?>

使用 const 定义的常量必须在顶层作用域 (top-level scope) 或类内部声明;它们不能像 define() 那样在函数或控制结构内部定义。

常量自动具有全局性 (global),可以在整个脚本中访问,无论它们在何处定义。

显示全局作用域的示例:

<?php
const SITE_NAME = "My Awesome Website";
function displaySiteName() {
// SITE_NAME 在函数内部是可访问的
echo "Welcome to " . SITE_NAME;
}
displaySiteName(); // 输出:Welcome to My Awesome Website
?>

PHP 提供了一些预定义的“魔术”常量,它们的值会根据它们被使用的位置而变化。这些常量对于调试和获取脚本的元信息非常有用。

  • __LINE__:文件中的当前行号。
  • __FILE__:文件的完整路径和文件名。
  • __DIR__:文件所在的目录。
  • __FUNCTION__:函数名。
  • __CLASS__:类名。
  • __TRAIT__:Trait 名称。
  • __METHOD__:类方法名。
  • __NAMESPACE__:当前命名空间的名称。
  • ClassName::class:完整的类名(PHP 5.5 引入)。

使用 __DIR__ 的示例:

<?php
// 假设这段代码位于 /var/www/myapp/config/app.php
echo "Configuration directory: " . __DIR__;
// 输出:Configuration directory: /var/www/myapp/config
?>

有关更多详情,请参考官方 PHP 常量文档: