R_U*_*ser 8 php php4 constants
我正在编写一个网站(PHP4).我计划在常量中保存在运行时不会更改的值.例如,这些是数据库的登录数据的版本号.
问题1:在常量中保存数据是否存在任何(安全相关的)问题?
目前我执行以下操作来定义和调用常量:
define("VERSION", "1.0");
echo "Current version: ".VERSION."."; // Result: "Current version: 1.0."
Run Code Online (Sandbox Code Playgroud)
有一件事让我烦恼:如果未定义常量,则返回"错误"变量名称而不是例如NULL.
define("VERSION", "1.0");
echo "Current version: ".VERSIONXXX."."; // Result: "Current version: VERSIONXXX."
Run Code Online (Sandbox Code Playgroud)
我发现在我意外输入错误的常量名称时收到错误消息和返回值"NULL"的一个解决方案是使用以下函数constant():
define("VERSION", "1.0");
echo "Current version: ".constant("VERSIONXXX")."."; // Result: "Current version: ."
Run Code Online (Sandbox Code Playgroud)
问题2:我可以以不同的方式阻止PHP返回不存在的变量的名称吗?
问题3:是否应始终使用函数返回PHP中的常量值constant()?
如果您尝试使用不存在的常量,PHP会自动假定它是一个字符串,这就是您看到的原因VERSIONXXX.
如果您的错误报告处于适当的级别,它会发出警告.这里最好的解决方案是确保您的代码使用正确的常量名称.
如果你知道常量的名称,最简单/最好直接使用它.echo MY_CONSTANT
如果您不知道常量的名称(例如,它的名称在变量中),请使用constant():
$name = 'MY_CONSTANT';
echo constant($name);
按相反的顺序:
问题 3: 否 问题 2: 不是,但您可以进行调整。
因为(问题 1:)error_reporting。您的 PHP 网络服务器配置隐藏了一些错误。如果你添加
error_reporting(E_ALL);
Run Code Online (Sandbox Code Playgroud)
到你的脚本头,你会得到一个
使用未定义常量 MY_CONST - 假定为“MY_CONST”
错误。不幸的是,常量可以被解释为字符串,这是 PHP 悠久历史中出现的一个问题。
如果您不能确定首先设置了常量,您可以使用定义的
if(defined('MY_CONSTANT') {
//do something
}
Run Code Online (Sandbox Code Playgroud)
但我个人认为,应该不会有很多情况需要这个,因为“常数”这个词本身就意味着有保证的存在。我能想到的唯一例外是典型的标头测试。
if(!defined('MY_APP_IS_PRESENT')) {
die('You can not call this file on its own, please use index.php.');
}
Run Code Online (Sandbox Code Playgroud)
最后一个提示:去为自己创建一个错误处理函数,甚至可以使用firephp?