IF条件:在第二个条件下将第一个赋值变量作为函数的参数传递

时间:2013-12-17 14:34:12

标签: php

我想做这样的事情:

if( $a = 'something' && $b = substr( $a, 2 ) )
{
    //do something
}

我的意思是,在if条件下,评估两个条件,第二个条件将第一个分配的$a作为参数传递给第二个条件函数substr()

这只是一个例子,所以我不想要这个功能的答案,只是一般答案。

以上代码会引发“未定义”$a,因为$a尚未分配。

我可以做下一个:

if( $a = 'something')
{
    if( $b = substr( $a, 2 ) )
        //do something
    }
}

但这会使我的代码更大。

有没有办法实现类似第一个例子?

修改

我不想比较。只需指定并确保$a$b不为空,false,...

4 个答案:

答案 0 :(得分:3)

您唯一的问题是&&=运营商的错误优先级。这很好用:

if (($a = 'something') && $b = substr($a, 2))

答案 1 :(得分:1)

这样,$a未定义:

if ($a = 'something' && $b = substr($a, 2))

但是如果你赋予=运营商优先权:

if (($a = 'something') && $b = substr($a, 2))

它将被设置。

此外,您可以简单地写一下:

if( $b = substr( $a = 'something', 2 ) )

答案 2 :(得分:1)

这个问题和@ moonwave99的答案一起引起了我的兴趣,所以我在他的最后一个答案做了一些测试。

if( $b = substr( $a = NULL, 2 ) ) { echo "PASS"; } else { echo "FAIL"; }

FAIL

if( $b = substr( $a = FALSE, 2 ) ) { echo "PASS"; } else { echo "FAIL"; }

FAIL

if( $b = substr( $a = 0, 2 ) ) { echo "PASS"; } else { echo "FAIL"; }

FAIL

if( $b = substr( $a = TRUE, 2 ) ) { echo "PASS"; } else { echo "FAIL"; }

FAIL

if( $b = substr( $a = 233, 2 ) ) { echo "PASS"; } else { echo "FAIL"; }

PASS

if( $b = substr( $a = "SOMETHING", 2 ) ) { echo "PASS"; } else { echo "FAIL"; }

PASS

让它失败的唯一方法是传递布尔值TRUE。但是,如果您期望字符串值,则它应该使所有布尔值失败,零和NULL并在整数,浮点数和字符串值上计算为true。 (没有使用数组进行测试,但我怀疑它会因任何非原始类型而失败)。有趣的问题。

答案 3 :(得分:0)

使用isset()。请记住使用=====进行比较操作,因为=是赋值运算符

if( (isset($a) &&  $a == 'something') && (isset($b) && $b == substr( $a, 2 )) )
{
    //do something
}