PHPでは許可されていません
class Foo
{
private const my_private_const;
もちろん許可します
const my_const;
つまり、定数はグローバルです。これは、をmy_const
使用してどこからでもアクセスできるためです。Foo::my_const
プライベート定数を作成する方法はありますか?
答えは単純に「いいえ」です。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!';
試してみる価値のあるものでしょうか?
乾杯
クラス定数の可視性修飾子が PHP 7.1 で追加されたことに注意してください。
RFC:クラス定数の可視性をサポート
@Madbreaks の回避策の簡略版: プライベートな「定数」の値を返すプライベートな静的関数を記述します。
private static function MY_CONSTANT() {
return "constant string";
}
使用法:
public static function DoStuff() {
echo self::MY_CONSTANT();
}