__CLASS__ PHP。需要对此进行澄清。

时间:2016-04-15 00:21:59

标签: php constants

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():找不到具有完全相同名称的常量//!

问题是:为什么我需要识别类名来访问常量; 这是范围问题还是什么?

2 个答案:

答案 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)。