2016-11-10 2 views
0

Я хочу посмотреть, есть ли упрощенный способ сделать оператор if, который проверяет несколько условий, где он использует данные из той же функции.Определить и проверить переменную в выражении if

if($class->function($id) && $class->function($id)['key'] > 0) 
{ 
    //Do something... 
} 

Проблема здесь заключается в том, что мы делаем 2 обращения к базе данных, которые извлекают одни и те же данные. Одно из очевидных решений делает следующее:

$classVariable = $class->function($id); 
if($classVariable && $classVariable['key'] > 0) 
{ 
    //Do something... 
} 

Мой вопрос конкретно это, я могу добиться того же эффекта все внутри if заявление? Например, (это не сработает):

if($classVariable = $class->function($id) && $classVariable['key'] > 0 
{ 
    //Do something... 
} 

Возможно ли это, и есть ли предпочтительный способ сделать это? Мне кажется, что определение и использование этого в том же заявлении было бы более чистым кодом ...

+2

Использование '() 'вокруг задания, и он будет работать нормально. –

+1

Следует отметить, что, хотя вы * можете * сделать это таким образом, это не рекомендуется. Вы должны объявить переменную перед оператором if. Но, это ваш код, и вы можете сделать это, как бы вы хотели :) – Kenyon

+0

Это работает. Кто-нибудь знает, есть ли предпочтение между его определением, а затем выполнение оператора 'if' или определение его внутри оператора' if'? Редактировать: Кеньон опубликовал, когда я спрашивал. Благодаря! :) –

ответ

1

Как сказала Ниет, используя круглые скобки() вокруг присваивания $ classVariable, и все должно работать.

(я только хотел отправить это как ответ, а не комментарий, так что вопрос получает решен, извините Niet)

Под редакцией О.П., чтобы показать ответ в коде ...

if(($classVariable = $class->function($id)) && $classVariable['key'] > 0) 
{ 
    //Do something... 
} 
+1

выложите свой ответ немного больше, включив в него то, что похоже на добавленную скобку. – pancho018

+0

@ pancho018 - Я добавил его в –

+0

еще 34 представителя, и вы тоже сможете комментировать ;-) точно так же, как Ниет. Написание хороших/лучших ответов привлекает (положительные) голоса, кстати. http://stackoverflow.com/help/how-to-answer –

Смежные вопросы