<?php $foo = '123hoge456'; $baz = true; if ($bar = strpos($foo, 'hoge') && $baz){ var_dump('A', $bar); } if (($bar = strpos($foo, 'hoge')) && $baz){ var_dump('B', $bar); } $foo = 'hoge456'; $baz = true; if ($bar = strpos($foo, 'hoge') && $baz){ var_dump('C', $bar); } $foo = 'hoge456'; $baz = true; if (($bar = strpos($foo, 'hoge')) && $baz){ var_dump('D', $bar); }
これの結果がどうなるか。
string(1) "A"
bool(true)
string(1) "B"
int(3)
です。
演算子として&&は=より強いし、strposの返り値は0もあるので。
ただ、こういう演算子の強さを知識の前提としたコードはよくないと思う。多少長くなっても
$foo = 'hoge456';
$baz = true;
$bar = strpos($foo, 'hoge');
if ($bar !== false && $baz){
var_dump('D', $bar);
}
と書くのがイイと思う。