在PHP中私有常量是可能的吗?
PHP不允许
class Foo { private const my_private_const;
但当然可以
const my_const;
所以实际上常量是全局的,因为我可以在任何地方使用Foo::my_const
访问Foo::my_const
有没有办法使私人常量?
答案是一个简单的“不”。 PHP不支持这个概念。 你可以做的最好的是在类中的private static
variables,这当然不是很好,因为它不是只读的。 但是你只需要解决它。
编辑
你的问题让我思考 – 这是我从来没有尝试过的东西,但可能工作。 换句话说,“这是未经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