我想根据不同的场景检查if语句中的不同条件(将InfoPtr
值设为$status
或'Y'
)。请检查下面的代码并告诉我这里的问题。
'N'
此代码无效,因为$fstrto = "10";
$cstrto = "7";
if($status == 'N')
{
$cond = "$fstrto <= $cstrto";
}
else
{
$cond = "$fstrto >= $cstrto";
}
if($cond)
{
echo "Success";
}
为变量。
答案 0 :(得分:2)
删除引号。如果输入是$fstrto = intval($fstrto);
中的字符串,则使用intval / doubleval。
$fstrto = 10;
$cstrto = 7;
if($status == 'N')
{
$cond = $fstrto <= $cstrto;
}
else
{
$cond = $fstrto >= $cstrto;
}
if($cond)
{
echo "Success";
}
为什么会起作用:$cond
被赋予布尔表达式的值,其值可以是true
或false
。 if($cond)
只会检查$cond
是true
还是false
答案 1 :(得分:1)
需要做的是使用字符串作为php代码使用
eval - 将字符串评估为PHP代码
使用下面的代码像魅力一样工作:
$fstrto = "10";
$cstrto = "7";
if($status == 'N')
{
$cond = "$fstrto <= $cstrto";
}
else
{
$cond = "$fstrto >= $cstrto";
}
if(eval("return $cond;"))
{
echo "Success";
}
重要:
强烈建议不要使用eval
永远不要在没有消毒的情况下通过POST / GET使用带有参数的eval
答案 2 :(得分:0)
你"$fstrto <= $cstrto"
现在是一个字符串比较语句。
$fstrto = "10";
$cstrto = "7";
if( ($status == 'N' && $fstrto <= $cstrto) || ($status != 'N' && $fstrto >= $cstrto) )
{
echo "Success";
}
答案 3 :(得分:0)
可能会将其转换为一个函数,如下所示汇总到switch
语句中:
function evaluateCondition($status, $a, $b) {
switch ($status) {
case 'Y':
return $a >= $b;
break;
case 'N':
return $a <= $b;
break;
default:
// Error Log. Unknown Status.
}
}
如果必要的话,任何未来的添加都可以附加到switch语句中,如果它更复杂,每个案例都会返回一个单独的function()
来提高可读性。
就当前版本而言,您可以像这样使用它:
$result = evaluateCondition('Y', 5, 6);
var_dump($result); // bool(false)
希望有所帮助。
答案 4 :(得分:-2)
$fstrto = "10";
$cstrto = "7";
$cond = false;
if($status == 'N')
{
if($fstrto <= $cstrto){
$cond = true;
}
}
else
{
if($fstrto >= $cstrto){
$cond = false;
}
}
if($cond)
{
echo "Success";
}