PHP在验证之前检测它是常量还是字符串
我正在开发一个函数来验证变量和常量PHP在验证之前检测它是常量还是字符串,php,variables,constants,Php,Variables,Constants,我正在开发一个函数来验证变量和常量 function checkVars($var){ if(isConstant($var)){ <--here is my problem, how do I check if its a Constant and or a string? return defined($var); }else{ //use other functions to check if its a valid variable } } 这只是一个示例,但您可以
function checkVars($var){
if(isConstant($var)){ <--here is my problem, how do I check if its a Constant and or a string?
return defined($var);
}else{
//use other functions to check if its a valid variable
}
}
这只是一个示例,但您可以使用4行代码来验证常量或变量,以满足特定的应用程序需要
其思想是通过一个返回true或false的函数调用保存所有工作:
if(isValid('CONS')){
//do stuff on true
}else{
//do stuff on false
}
您将使用来测试常量是否存在并已定义。然后使用with确定常量是否为字符串。我假设您使用的是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
}
您将使用来测试常量是否存在并已定义。然后使用with确定常量是否为字符串。我假设您使用的是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
}
检查常量是否由其名称定义:
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
检查常量是否由其名称定义:
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
根据安德烈·沃克的回答,我做了一些修改,效果很好 get_defined_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';
}
谢谢 根据安德烈·沃克的回答,我做了一些修改,效果不错 get_defined_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';
}
谢谢
is_string()
在这里不适用于您?我认为您无法检查值是否为常量。如果传入一个常量,它将是该常量的值。除非传入的值是常量本身的名称。请提供一个示例,说明如何调用此函数,以及希望它返回什么。@a您可以测试是否定义了的常量(常量的名称)
,并且可以使用常量(常量的名称)检查常量的值
@JayBlanchard谢谢。今天学到了一些新东西:-Dis_string()
在这里不适用于您?我认为您无法检查值是否为常量。如果传入一个常量,它将是该常量的值。除非传入的值是常量本身的名称。请提供一个示例,说明如何调用此函数,以及希望它返回什么。@a您可以测试是否定义了的常量(常量的名称)
,并且可以使用常量(常量的名称)检查常量的值
@JayBlanchard谢谢。今天学到了一些新东西:-即使未定义常量,DIt也返回TRUE我忘记了仅使用用户定义的常量。更新了答案@CrashOverride正在工作。仍然不工作,但我更改了数组搜索,因为数组存在并且工作正常。添加它作为答案,谢谢你的帮助。在这里用于检查值array\u key\u exists()
将搜索该键。如果您正在接收密钥,您可以通过defined('MYCONSTNAME')
进行检查。即使未定义常量,它也会返回TRUE。我忘了仅使用用户定义的常量。更新了答案@CrashOverride正在工作。仍然不工作,但我更改了数组搜索,因为数组存在并且工作正常。添加它作为答案,谢谢你的帮助。在这里用于检查值array\u key\u exists()
将搜索该键。如果您正在接收密钥,您可以通过defined('MYCONSTNAME')
进行检查。我猜您的问题有误导性/混淆性。这与检查变量是否为字符串无关,而只是检查该常量是否已定义。我猜您的问题有误导性/混淆性。这与检查变量是否为字符串无关,而只是检查该常量是否已定义。