私有常量在 PHP 中是可能的吗?
PHP 不允许
class Foo
{
private const my_private_const;
但当然允许
const my_const;
所以实际上常量是全局的,因为我可以使用任何地方访问my_const
Foo::my_const
有没有办法制作私有常量?
PHP 不允许
class Foo
{
private const my_private_const;
但当然允许
const my_const;
所以实际上常量是全局的,因为我可以使用任何地方访问my_const
Foo::my_const
有没有办法制作私有常量?
现在,可以使用具有类常量的可见性修饰符。
<?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 不支持这个概念。你能做的最好的事情就是类中的变量,这当然不是那么好,因为它不是只读的。但你只需要解决这个问题。private static
编辑
你的问题让我思考 - 这是我从未尝试过的东西,但可能会起作用。换句话说,“这是未经测试的”。但是假设你想要一个名为“私有常量”: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;
...但至少这行不通:
$this->FOO = 'illegal!';
也许值得尝试一些东西?
干杯