[英]Can I access a PHP Class Constant using a variable for the constant name?
[英]Accessing a class constant using a simple variable which contains the name of the constant
我正在嘗試訪問我的一個類中的類常量:
const MY_CONST = "value";
如果我有一個變量,它像這樣保存這個常量的名稱:
$myVar = "MY_CONST";
我可以以某種方式訪問 MY_CONST 的值嗎?
self::$myVar
顯然不起作用,因為它用於靜態屬性。 可變變量也不起作用。
常量函數與通過define
聲明的常量以及類常量一起使用:
class A
{
const MY_CONST = 'myval';
static function test()
{
$c = 'MY_CONST';
return constant('self::'. $c);
}
}
echo A::test(); // output: myval
第二種更費力的方法是通過反思:
$ref = new ReflectionClass('A');
$constName = 'MY_CONST';
echo $ref->getConstant($constName); // output: myval
沒有相應的語法,但您可以使用顯式查找:
print constant("classname::$myConst");
我相信它也適用於self::
。
我可以以某種方式訪問 MY_CONST 的值嗎?
self::MY_CONST
如果要動態訪問,可以使用反射 API Docs :
$myvar = 'MY_CONST';
$class = new ReflectionClass(self);
$const = $class->getConstant($myVar);
反射 API 的好處是您可以一次獲取所有常量 ( getConstants
)。
如果您因為不想使用反射 API 而不喜歡它,另一種方法是使用constant
函數 ( Demo ):
$myvar = 'MY_CONST';
class foo {const MY_CONST = 'bar';}
define('self', 'foo');
echo constant(self.'::'.$myvar);
你有沒有嘗試過
$myVar = MY_CONST or $myVar = $MY_CONST
只是對 Reflection 的說明:ReflectionClass 的構造函數必須為其參數接收類的完整路徑。 這意味着在某些情況下,僅將字符串 'A' 設置為構造函數參數可能不起作用。
為了避免這個問題,在使用 ReflectionClass 時,如果你這樣做會更好:
$classA = new A();
$name_classA = get_class($classA);
$ref = new ReflectionClass(get_class($name_classA));
$constName = 'MY_CONST';
echo $ref->getConstant($constName);
每當您在代碼中時,函數 get_class 都會為您提供類的完整路徑。 缺少完整路徑可能會導致“找不到類”PHP 錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.