Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
__类PHP。我需要澄清一下。_Php_Constants - Fatal编程技术网

__类PHP。我需要澄清一下。

__类PHP。我需要澄清一下。,php,constants,Php,Constants,警告:常量():找不到具有完全相同名称的常量/ 问题是:为什么我需要识别类名来访问常量; 这是一个范围问题还是什么 …这是一个范围问题还是什么 你搞定了 当您定义了一个局部常量(在类内部)时,它是一个 为了访问类常量,您应该在前面加上类名(在引用类外部时)或关键字,如下所示: class foo { const bar1 = 10.0; const bar2 = 2.22; const bar3 = 5.12; function getTotal($some_string,

警告:常量():找不到具有完全相同名称的常量/

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

…这是一个范围问题还是什么

你搞定了
当您定义了一个局部常量(在类内部)时,它是一个

为了访问类常量,您应该在前面加上类名(在引用类外部时)或关键字,如下所示:

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;  
    } 
}
…这是一个范围问题还是什么

你搞定了
当您定义了一个局部常量(在类内部)时,它是一个

为了访问类常量,您应该在前面加上类名(在引用类外部时)或关键字,如下所示:

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;  
    } 
}

如果类外有一个常量,它的行为将与类外的常量相同。如果在类内声明一个常量,它几乎就像一个静态属性,并且可以以非常类似的方式访问(例如,类内的
self::MY_constant
,或类外的
Foo::MY_constant
;与
self:$staticProperty
Foo:$staticProperty
相比)

这有助于确定哪些类用作依赖项,以及常量的实际定义位置。这通常允许常量更具可读性,因为它提供了与常量相关的上下文线索


另一方面,让常量完全大写并加下划线(例如,
MY_CONSTANT
而不是
myConstant
)是一种很好的样式。此外,类名通常被引用为大写(
MyClass
而不是
MyClass
)。

如果类外有一个常量,它将作为类外的常量。如果在类内声明一个常量,它几乎就像一个静态属性,并且可以以非常类似的方式访问(例如,类内的
self::MY_constant
,或类外的
Foo::MY_constant
;与
self:$staticProperty
Foo:$staticProperty
相比)

这有助于确定哪些类用作依赖项,以及常量的实际定义位置。这通常允许常量更具可读性,因为它提供了与常量相关的上下文线索


另一方面,让常量完全大写并加下划线(例如,
MY_CONSTANT
而不是
myConstant
)是一种很好的样式。另外,类名通常被引用为大写驼峰(
MyClass
而不是
MyClass
)。

是的,它是a.Yes,但为什么它会这样呢?因为您已经声明了它。这是否意味着如果它是类常量,为了访问bar1,我必须显式地声明
常量(“foo::bar1”)与常数(“bar1”);//那就是如果bar1=const
?是的,它是一个。是的,但为什么它的行为是这样的?因为您已经声明了它是这样的。这是否意味着如果它是一个类const,为了访问bar1,我必须显式地声明
常量(“foo::bar1”)与常数(“bar1”);//那就是如果bar1=const
?上下文线索,明白了!背景线索,明白了!