在PHP中重新定义常量

时间:2011-12-11 15:31:17

标签: php constants

是否可以重新定义由define函数定义的php中的常量? 我有一个包含几个常量的类,其中包含用户数据。我正在尝试将该课程用于多个用户。

define('ALLEGRO_ID', 'id');
define('ALLEGRO_LOGIN', 'login');
define('ALLEGRO_PASSWORD', 'passwd');
define('ALLEGRO_KEY', 'key');
define('ALLEGRO_COUNTRY', 123);

$allegro = new AllegroWebAPI( );                
$allegro -> Login();

我没有写这个课,但由于时间限制,我正在使用它。我不知道为什么这个类defined的创建者是用户数据,而不是在实例中使用变量。

我知道常量应该是常数(显然!),但我正在寻找一种技巧来重新定义它们。

5 个答案:

答案 0 :(得分:58)

如果您安装了runkit extension,则可以使用runkit_constant_redefine()

runkit_constant_redefine("name", "value");

然而,在大多数情况下,重新评估为什么使用常数而不是更合适的东西会更好。

答案 1 :(得分:22)

不,您无法重新定义常量(runkit_constant_redefine除外),
这就是为什么叫做CONSTANT。

您在课堂上寻找的实际上是数组格式的对象变量: -

class user
{
  public $user = array();

  function load($user_id)
  {
    // etc
    $this->$user[$user_id] = something_else;
  }
}

答案 2 :(得分:6)

在PHP 5.6+中,您可以在别名下导入常量。这样的别名可以覆盖已存在的常量。

以下代码段将打印int(5)

define('ALLEGRO_ID', 3);
define('NEW_ALLEGRO_ID', 5);
use NEW_ALLEGRO_ID as ALLEGRO_ID;
var_dump(ALLEGRO_ID);

这种机制在单元测试或其他容忍魔术行为的领域可能是合法的,但对于您的用例来说并不方便,因为存储用户设置的类会更有用。

最后,此行为可以创建非常令人困惑的情况,例如use const true as false;

答案 3 :(得分:3)

一旦定义的常量值在整个程序中保持不变。如果您希望在将来更改值时有这样的要求,请将这些值保存在PHP变量中。

答案 4 :(得分:3)

将第3个参数传递为true将对您有帮助

define('CONSTANT_NAME', 'constant_value', true);
print CONSTANT_NAME.PHP_EOL;
define('CONSTANT_NAME', 'constant_value2');
print CONSTANT_NAME.PHP_EOL;

https://ideone.com/oUG5M9