Are private constants possible in PHP? [duplicate]

两盒软妹~` 提交于 2019-11-30 12:23:42

问题


PHP does not allow

class Foo
{
    private const my_private_const;

but of course allows

const my_const;

So in effect constants are global because I can access my_const anywhere using Foo::my_const

Is there a way to make private constants?


回答1:


The answer is a simple "no". PHP doesn't support this concept. The best you can do is a private static variable in the class, which isn't as good of course because it's not readonly. But you just have to work around it.

Edit

Your question got me thinking - here's something I've never tried, but might work. Put another way "this is untested". But say you wanted a "private constant" called 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;
}

Of course your syntax would look a bit odd:

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

...but at least this wouldn't work:

$this->FOO = 'illegal!';

Maybe something worth trying?

Cheers




回答2:


Folks! PHP 7.1.0 has been released

Now it's possible to have visibility modifiers with class constants.

<?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;
?>

Output of the above example in PHP 7.1:

bar

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



回答3:


Note, that visibility modifiers for class constants have been added in PHP 7.1.

RFC: Support Class Constant Visibility




回答4:


A simplified version of @Madbreaks' workaround: write a private static function that returns the value of your private "constant":

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

Usage:

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


来源:https://stackoverflow.com/questions/10232434/are-private-constants-possible-in-php

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!