PHP 5: const vs static

在 PHP 5 中,使用 和 之间有什么区别?conststatic

什么时候适合?如果有的话,它扮演什么角色和作用?publicprotectedprivate


答案 1

在类的上下文中,静态变量位于类作用域(而不是对象)作用域上,但与常量不同,它们的值可以更改。

class ClassName {
    static $my_var = 10;  /* defaults to public unless otherwise specified */
    const MY_CONST = 5;
}
echo ClassName::$my_var;   // returns 10
echo ClassName::MY_CONST;  // returns 5
ClassName::$my_var = 20;   // now equals 20
ClassName::MY_CONST = 20;  // error! won't work.

公共,受保护和私有在consts方面无关紧要(它们总是公共的);它们仅对类变量(包括静态变量)有用。

  • 公共静态变量可以通过 ClassName::$variable 在任何地方访问。
  • 受保护的静态变量可由定义类访问,或通过 ClassName::$variable 扩展类访问。
  • 私有静态变量只能由定义类通过 ClassName::$variable 访问。

编辑:重要的是要注意,PHP 7.1.0引入了对指定类常量可见性的支持


答案 2

应该提出的最后一点是,const总是静态和公开的。这意味着您可以从类中访问const,如下所示:

class MyClass
{
     const MYCONST = true;
     public function test()
     {
          echo self::MYCONST;
     }
}

从类外,您可以像这样访问它:

echo MyClass::MYCONST;

推荐