【问题标题】:What to define Predefined Constants as将预定义常量定义为什么
【发布时间】:2009-05-15 19:52:57
【问题描述】:

我有一个数据库类,它会自动建立与数据库的连接并执行一些基本的输入过滤等等。我正在考虑设置一些预定义的常量来调整类方法的行为。我应该将常量的值设置为什么?由于这些值永远不会被直接引用或比较,而是仅在常量名称的上下文中,值甚至重要吗?

我遇到的一种策略是将常量设置为位值,以便可以使用位运算符来组合常量。在这种情况下,看起来不需要该功能,但您永远不知道。

我经常收到类似

的消息
Notice: Use of undefined constant CONSTANT_VALUE - assumed 'CONSTANT_VALUE'

这是将常量视为字符串“CONSTANT_VALUE”还是常量 CONSTANT_VALUE?我应该将常量的值定义为同名的字符串以弥补这一点吗?当我使用我知道在某些时候定义的常量时会发生这种情况,例如 DOCUMENT_ROOT。

我是否错过了其中任何一个更好的做法?

【问题讨论】:

  • 当 PHP 看到像 CONSTANT_VALUE 这样的未定义常量时,它会将常量视为字符串 'CONSTANT_VALUE'

标签: php class constants


【解决方案1】:

如果您收到该消息,则有问题的常量没有在该代码运行时定义,它被视为字符串'CONSTANT_VALUE'。

如果您定义的一组常量的值是完全任意的并且不需要是可位掩码的,请使用正整数序列。

【讨论】:

  • $_SERVER[DOCUMENT_ROOT] 的例子呢?我认为这是一个定义的值,但我收到通知并且它确实有效。 DOCUMENT_ROOT 是实际定义的常量吗?
  • 嗯,没有。它是 $_SERVER['DOCUMENT_ROOT']。 DOCUMENT_ROOT 根本不是一个常数。当您执行 $_SERVER[DOCUMENT_ROOT] 时它起作用的唯一原因是故障转移到它在该警告中告诉您的字符串值。故障转移是为了补偿不合格的编码,而不是支持的语言功能,这就是它发出警告的原因。
【解决方案2】:

如果常量不打算在数据库类之外使用你不需要定义全局常量,你可以使用类常量:

http://uk.php.net/manual/en/language.oop5.constants.php

【讨论】:

  • 它们将被其他调用数据库函数的脚本使用。即$database->action($values, CONSTANT_VALUE)。类函数可以像 $database->action($values, DbClass::CONSTANT_VALUE) 那样调用吗?
  • 是的。在此处查看手册:uk2.php.net/manual/en/language.oop5.constants.php
猜你喜欢
  • 1970-01-01
  • 2011-01-25
  • 2021-12-10
  • 1970-01-01
  • 2017-09-15
  • 2022-11-16
  • 2011-09-06
  • 2018-11-26
  • 2015-07-01
相关资源
最近更新 更多