class foo {
const bar1 = 10.0;
const bar2 = 2.22;
const bar3 = 5.12;
function getTotal($some_string, $some_number) {
$total = 0.0;
// Why would this flag a warning?
// $what_is_const = constant("bar" . $some_string); // DOES NOT WORK!
$what_is_const = constant(__CLASS__ . "::bar" . $some_string); // WORKS!
$total += $what_is_const * $some_number;
}
}
警告:constant():找不到具有完全相同名称的常量//!
问题是:为什么我需要识别类名来访问常量; 这是范围问题还是什么?
答案 0 :(得分:0)
......这是一个范围问题还是什么?
你钉了它!
当你定义了一个局部常量(内部类)时,它是class constant。
为了访问类常量,您应该在类名称(引用类外部时)或通过self, static关键字前置,如下所示:
class Foo {
const BAR = 1;
function getBar() { return self::BAR; }
}
答案 1 :(得分:0)
如果你在一个类之外有一个常量,它将在一个类之外表现为常量。如果在类中声明一个常量,它几乎就像一个静态属性,并且可以以非常类似的方式访问(例如,类中的self::MY_CONSTANT
或类外的Foo::MY_CONSTANT
;与{{1}进行比较}或self::$staticProperty
)。
这有助于确定哪些类被用作依赖项,以及实际定义常量的位置。那,它通常允许常量更具可读性,因为它给出了与常量相关的上下文线索。
顺便说一下,使用下划线将常量完全大写(例如,Foo::$staticProperty
而不是MY_CONSTANT
)是一种很好的风格。此外,类名通常被引用为上骆驼案例(myConstant
而不是MyClass
)。