69

PHPでは許可されていません

class Foo
{
    private const my_private_const;

もちろん許可します

const my_const;

つまり、定数はグローバルです。これは、をmy_const使用してどこからでもアクセスできるためです。Foo::my_const

プライベート定数を作成する方法はありますか?

4

4 に答える 4

43

答えは単純に「いいえ」です。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!';

試してみる価値のあるものでしょうか?

乾杯

于 2012-04-19T17:38:26.307 に答える
30

クラス定数の可視性修飾子が PHP 7.1 で追加されたことに注意してください。

RFC:クラス定数の可視性をサポート

于 2016-06-03T22:20:11.953 に答える
7

@Madbreaks の回避策の簡略版: プライベートな「定数」の値を返すプライベートな静的関数を記述します。

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

使用法:

public static function DoStuff() {
    echo self::MY_CONSTANT();
}
于 2015-05-14T21:17:23.077 に答える