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

2022-08-30 08:52:55

PHP 不允许

class Foo
{
    private const my_private_const;

但当然允许

const my_const;

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

有没有办法制作私有常量?


答案 1

人!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 …

答案 2

答案很简单“不”。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!';

也许值得尝试一些东西?

干杯


推荐