3 回答
TA贡献1877条经验 获得超6个赞
检查一个常量是否由她的名字定义:
defined('CONSTANT');
检查是否有任何值是字符串:
is_string(CONSTANT);
从逻辑上讲,如果它不是常量,那么它只是一个字符串。
要检查是否是常量,您必须在字符串中传递常量名称。您还可以使用 检查是否存在具有相同值的常量get_defined_constants(),但您不会知道是否是相同的常量。
define('MYCONST', "THE VALUE");
function exists_a_constant($value)
{
$constants = get_defined_constants(true);
return in_array($value, $constants['user']); // true if finds or false if not
// return array_search($value, $constants['user']); //Will return the key (name of the constant)
}
function checkVars($var)
{
if (exists_a_constant($var)) {
echo "exists a constant";
} else {
echo "not";
}
}
checkVars(MYCONST);
// exists a constant
checkVars('MYCONST');
// not
checkVars("THE VALUE");
// exists a constant
checkVars("random string");
// not
TA贡献1827条经验 获得超7个赞
您将使用defined()
来测试该常量是否存在并已定义。然后使用is_string()
withconstant()
来判断常量是否是字符串。我假设您正在使用,return
因为此条件是函数的一部分:
if(defined($constantName) and is_string(constant($constantName))) {
return constant($constantName);
} else {
// other code
}
运行以下测试我可以看到返回了“bar”:
define("FOO", "bar");
$constantName = "FOO";
if(defined($constantName) and is_string(constant($constantName))) {
echo constant($constantName); // 'bar'
} else {
// other code
}
TA贡献1775条经验 获得超11个赞
我做了一些更改并且有效。
get_define_constants 获取一个包含所有已定义常量的数组,然后我使用 array_key_exists 来检查您传递的常量是否在数组中。
define('FOO','bar');
function exists_a_constant($value){
$constants = get_defined_constants();
return array_key_exists($value,$constants);
}
if(exists_a_constant('FOO')){
echo 'defined';
}else{
echo 'not defined';
}
- 3 回答
- 0 关注
- 133 浏览
添加回答
举报