Source Code Fundamentals: Constants

常量是被命了名的值,一旦定义,常量的值就不能更改。常量可以用以下两种方式中的一种来定义:在顶层或者在类以及接口的内部通过 const 关键字来定义。例如:

const int MAX_COUNT = 123;
class C {
  const float MAX_HEIGHT = 10.5;
  const float UPPER_LIMIT = C::MAX_HEIGHT;
}

<<__EntryPoint>>
function main(): void {
  echo "MAX_COUNT = ".MAX_COUNT."\n";
  echo "MAX_HEIGHT = ".C::MAX_HEIGHT."\n";
}
Output
MAX_COUNT = 123
MAX_HEIGHT = 10.5

上下文相关常量

以下常量(或者被成为魔术常量)在所有脚本中都可以直接使用,并且它们的值不是固定的:

常量名 说明
__CLASS__ string; 获取当前类的名称。在 trait 中使用时,将会得到使用了该 trait 的类的名称。如果当前命名空间不是默认命名空间,那么命名空间和“\”将会出现在前面。如果在类的外部使用,将得到空字符串。
__DIR__ string; 获取当前脚本所在目录的名称。只有根目录时才会在末尾出现目录分隔符。
__FILE__ string; 获取当前脚本的完整文件名。
__FUNCTION__ string; 在函数中时,获取当前函数被定义时的名称,且当命名空间存在时,将以命名空间和“\”作为前缀。如果是在函数外部调用,将得到空字符。在方法中调用时,不会得到类名。(参见 __METHOD__匿名函数
__LINE__ int; 获取当前代码的行号。
__METHOD__ string; 在方法内调用时,将得到当前方法被声明的名称(以::将类名或者 trait 名隔开),且当命名空间存在时,将以命名空间和“\”作为前缀。如果在方法外调用,结果和 __FUNCTION__ 一致。
__NAMESPACE__ string; 获取当前命名空间名称。如果时默认命名空间,将会得到空字符串。
__TRAIT__ string; 获取当前 trait 的名称。在 trait 里的方法调用时,将得到当前 trait 的名称;在 trait 外部调用时,得到空字符串。

核心预定义常量

命名空间 HH\Lib\Math 中包含了大量跟整型相关的常量(例如 INT64_MAXINT64_MIN


本节由 Y!an 翻译