php系统常量无需定义即可直接使用,如{:php_version}输出版本号;自定义常量须在app/common.php中用define()定义并确保自动加载,模板中仅支持输出php内置常量和框架初始化加载的自定义常量。

PHP系统常量是脚本运行时自动可用的固定值,不用定义就能直接用。它们分两类:一类是PHP自己带的(比如PHP_VERSION),另一类是你自己加的(比如SITE_NAME)。关键不是“能不能写”,而是“在哪写、怎么写、模板里怎么取”。下面按实际开发顺序讲清楚。
一、哪些系统常量能直接用?怎么用?
PHP内置常量如__FILE__、__LINE__、PHP_VERSION、PHP_OS、DS、PATH_SEPARATOR等,无需任何操作,在PHP代码里随时可读:
echo __FILE__; // 输出当前文件绝对路径echo PHP_VERSION; // 输出类似 "8.1.23"echo DS; // Linux下是"/",Windows下是"\"
注意:不能加括号,比如phpversion()或__FILE__()会报错——它们是常量,不是函数。
二、自定义常量该在哪里定义?
要用自己起名的常量(比如MAX_RETRY、UPLOAD_PATH),必须用define()或const声明。但位置很重要:
- 全局常量推荐写在
app/common.php(ThinkPHP项目)或config/bootstrap.php这类所有请求都会加载的入口文件中 - 用
define('SITE_TITLE', '我的网站');最稳妥,支持运行时动态值(比如拼接路径) - 用
const SITE_TITLE = '我的网站';也可以,但只能出现在文件顶层,不能放在函数或条件块里 - 别在
config/app.php这种配置数组里写'site_name' => 'xxx'——那是配置项,不是常量,模板里不能用{:SITE_NAME}取
三、模板里怎么安全输出常量?
ThinkPHP模板引擎只识别两类常量:PHP内置常量和被框架初始化流程加载过的自定义常量:
-
{:PHP_VERSION}✅ 正确,直接输出版本号 -
{:DS}✅ 正确,输出目录分隔符 -
{:SITE_TITLE}✅ 前提是已在app/common.php中define('SITE_TITLE', ...)且该文件已被自动加载 -
{:APP_PATH}❌ 错误,这是ThinkPHP内部常量,默认不透出到模板,需手动导入或改由控制器传值 -
{:defined('SITE_TITLE')}❌ 模板不执行函数,这会输出空或报错
如果改了常量却没生效,记得清缓存:php think clear 或重启Web服务。
四、验证和调试小技巧
上线前快速确认常量是否就位:
- 在任意控制器里加一行:
dump(defined('SITE_TITLE'));,返回true说明已定义 - 用
constant('SITE_TITLE')测试能否取到值,避免拼写错误 - 在模板开头加
{:print_r(get_defined_constants(true)['user'], true)}(仅开发环境),可看到当前所有用户定义常量列表 - 大小写敏感默认开启,
define('API_URL', '...')之后必须用{:API_URL},不能写成{:api_url}
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











