在PHP中私有常量是可能的吗?

PHP不允许

class Foo { private const my_private_const; 

但当然可以

 const my_const; 

所以实际上常量是全局的,因为我可以在任何地方使用Foo::my_const访问Foo::my_const

有没有办法使私人常量?

答案是一个简单的“不”。 PHP不支持这个概念。 你可以做的最好的是在类中的private staticvariables,这当然不是很好,因为它不是只读的。 但是你只需要解决它。

编辑

你的问题让我思考 – 这是我从来没有尝试过的东西,但可能工作。 换句话说,“这是未经testing的”。 但是说你想要一个叫做FOO的“私人常量”

 // "Constant" definitions private function __get($constName){ // Null for non-defined "constants" $val = null; switch($constName){ case 'FOO': $val = 'MY CONSTANT UNCHANGEABLE VALUE'; break; case 'BAR': $val = 'MY OTHER CONSTANT VALUE'; break; } return $val; } 

当然你的语法看起来有点奇怪:

 // Retrieve the "constant" $foo = $this->FOO; 

…但至less这是行不通的:

 $this->FOO = 'illegal!'; 

也许值得尝试的东西?

干杯

伙计们! PHP 7.1.0已经发布

现在可以使用类常量来设置可见性修饰符。

 <?php class Foo { // As of PHP 7.1.0 public const BAR = 'bar'; private const BAZ = 'baz'; } echo Foo::BAR, PHP_EOL; echo Foo::BAZ, PHP_EOL; ?> 

在PHP 7.1中输出上面的例子:

 bar Fatal error: Uncaught Error: Cannot access private const Foo::BAZ in … 

请注意,类常量的可见性修饰符已添加到PHP 7.1中。

RFC: 支持类常量可见性

@Madbreaks'解决方法的简化版本:编写一个私有静态函数,返回您的私有“常量”的值:

 private static function MY_CONSTANT() { return "constant string"; } 

用法:

 public static function DoStuff() { echo self::MY_CONSTANT(); } 

你也可以使用:

 private static $foo; 

要么

 protected static $bar; 

在课堂上,你可以打电话。 或者通过:

 self::$foo $this::$foo CLASSNAME::$foo