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.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 …
クラス定数の可視性修飾子がPHP 7.1。
RFC: クラスの定数可視性のサポート
@Madbreaksの回避策の簡易バージョン:プライベート「定数」の値を返すプライベート静的関数を作成します。
private static function MY_CONSTANT() {
return "constant string";
}
使用法:
public static function DoStuff() {
echo self::MY_CONSTANT();
}