我想做这样的事情:
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,...
答案 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
}