【问题标题】:When and how to use Constants in PHP?何时以及如何在 PHP 中使用常量?
【发布时间】:2011-12-27 07:46:51
【问题描述】:

我目前正在编写一个网站(使用 PHP4)。我计划将在运行时不会更改的值保存在常量中。例如,这些是数据库登录数据的版本号。

问题 1:将数据保存在常量中是否会出现任何(安全相关的)问题?

目前我执行以下操作来定义和调用常量:

define("VERSION",   "1.0");
echo "Current version: ".VERSION."."; // Result: "Current version: 1.0."

有一件事让我很恼火:如果未定义常量,则返回“错误”变量名而不是例如NULL.

define("VERSION",   "1.0");
echo "Current version: ".VERSIONXXX."."; // Result: "Current version: VERSIONXXX."

当我不小心输入错误的常量名时,我发现一个错误消息和返回值“NULL”的解决方案是使用函数constant()

define("VERSION",   "1.0");
echo "Current version: ".constant("VERSIONXXX")."."; // Result: "Current version: ."

问题 2:我能否以不同的方式防止 PHP 返回不存在变量的名称?

问题 3:PHP 中常量的值是否应该总是使用函数constant()返回?

【问题讨论】:

  • 你有什么理由留在不再活跃的 PHP4 上?

标签: php constants php4


【解决方案1】:

倒序:

问题 3:否 问题 2:不是真的,但您可以进行调整。

因为(问题 1:)error_reporting。您的 PHP 网络服务器已配置隐藏一些错误。如果你添加

error_reporting(E_ALL);

到你的脚本头,你会得到一个

使用未定义的常量 MY_CONST - 假定为 'MY_CONST'

错误。不幸的是,在 PHP 的悠久历史中出现了一个问题,即常量可以被解释为字符串。

如果你不能确定一开始就设置了一个常量,你可以使用定义

if(defined('MY_CONSTANT') {
     //do something
}

但我个人认为,不需要这个的情况应该不多,因为常量这个词本身就意味着保证存在。我能想到的唯一例外是典型的标头测试。

if(!defined('MY_APP_IS_PRESENT')) {
    die('You can not call this file on its own, please use index.php.');
}

最后一个提示:去为自己创建一个errorhandler 函数,甚至可以使用firephp

【讨论】:

    【解决方案2】:
    1. 如果您尝试使用不存在的常量,PHP 会自动假定它是一个字符串,这就是您看到 VERSIONXXX 的原因。

    2. 如果您的错误报告处于适当的级别,IIRC 会发出警告。最好的解决方案是确保您的代码使用正确的常量名称。

    3. 如果您知道常量的名称,那么直接使用它是最简单/最好的。 echo MY_CONSTANT
      如果您不知道常量的名称(例如,它的名称在变量中),请使用constant()

    $name = 'MY_CONSTANT'; 回声常数($名称);

    【讨论】:

      【解决方案3】:

      嗯,你总是可以使用defined 函数来确保常量存在。结合三元语句,您可以简单地回显一个空字符串,例如:

      echo defined( VERSION ) ? VERSION : "";
      

      不是最佳答案,但可行吗?

      defined() 的 PHP 手册位于 http://php.net/manual/en/function.defined.php

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-29
        • 2012-06-07
        • 1970-01-01
        • 2010-11-27
        • 1970-01-01
        • 1970-01-01
        • 2022-08-05
        • 2012-02-20
        相关资源
        最近更新 更多