Мне интересно, будет ли это работать с любыми крупными версиями PHP?
if ($foo != $bar && '' != $str = some_function($some_variable))
echo $str;
some_function($some_variable)
возвращает строку, которая назначается переменной $str
а затем проверяется, является ли пустая строка. Переменная $str
используется, конечно, позже.
Будет ли выход some_function
назначенной переменной $str
в каждой основной версии PHP (> 5)? Я не мог найти никакой информации об этом. Благодарю.
В настоящее время я работаю 5.4, и он работает.
Изменить: Чтобы избежать дальнейшей путаницы, $foo != $bar
предшествует другому выражению, потому что переменная $str
используется только внутри оператора if. Извините, я забыл прояснить это.
Я бы не понял, почему это не сработает ни в одной версии PHP (> 5). Протестировано здесь: http://sandbox.onlinephpfunctions.com/code/a295189c50c191bbd0241d4e8ea4e3081cdb40ae
Работал со всеми версиями от 4.4.9 и выше.
Примечание. Поскольку вы используете оператор &&, код после && не будет запущен, если $ foo! = $ Bar уже возвращает false, поскольку второе выражение не может изменить результат оператора &&, поэтому оно просто игнорирует его.
Если задание имеет намерение всегда иметь место, измените порядок выражений.
if ('' != $str = some_function($some_variable) && $foo != $bar)
echo $str;
Да, это действительно работает, но чтобы заставить его работать так, как вы хотите, вы должны поставить скобки вокруг назначения, потому что сравнение имеет более высокий приоритет, чем назначение! (приоритет оператора)
Кроме того, если $foo != $bar
является ложным, $str
никогда не будет инициализироваться, поэтому также измените порядок, чтобы он получал все время.
Поэтому используйте это:
if ('' !== ($str = some_function($some_variable)) && $foo != $bar)
//^^^ ^ See here And here^
//| '!==' to also check the type
!==
для этих сравнений строк только в случае жонглирования типов?
$bar
и $foo
также строками, поэтому я не обновил их там)
Почему бы вам не сделать это ясным и не путать, используя скобки и фигурные скобки. Пример:
if (($foo != $bar) && '' != ($str = some_function($some_variable)) ) {
echo $str;
}