2013-06-13 3 views
0

Извините, я довольно новичок в php.Условный, если условия ... Возможно?

Возможно ли это как можно?

if (if ($clauseA) { A } if ($clauseB) { || B }) { 
    // Do Stuff 
} 

То, что я хочу сделать, если $ clauseA правды, включает в себя A в состоянии и если $ clauseB верно, то включает || B (OR и B) в состоянии.

Есть ли какой-либо надежный способ достичь этого?

+0

Что такое? и что такое B? являются ли они переменными, утверждениями, чем-то еще? – HorusKol

+1

Что такое '|| B' должен был делать? –

ответ

0

логический or, aliased ||, всегда работает таким образом. Если первое условное выражение не оценивается как true, второе условное выражение не проверяется и не выполняется.

То же самое касается and (&&), оно не будет продолжаться, если первое выражение оценивается как false.

Обновление: Фактически, я думаю, что я только понял вопрос. :)

if (($clauseA && A) || ($clauseB && B)) { 
    // A and B will only be checked if the appropriate clause is true, otherwise they are ignored. 
} 
+1

'или' и '||' имеют немного другое поведение в php. http://php.net/manual/en/language.operators.logical.php –

+0

@Cobra_Fast Символические варианты имеют больший приоритет. Как иначе они различаются? –

+0

Это именно то, что я имел в виду. –

0

if ($clauseA) { if ($clauseB) { B } else { A } // Do stuff }

+1

Резервная логика. Зачем дважды проверять '$ clauseA'? Ты только что сделал это. –

+0

Он сказал, что он новичок в php, и он хотел «сделать это, если $ clauseA истинно, включить A в условие и если $ clauseB истинно, тогда включите || B (OR и B) в состояние». и я думаю, что если я напишу так, это станет более понятным для него. – Eyesis

2

Похоже, что вы пытаетесь сделать это ....

  1. Если пункт А верно, оценить как часть вашего состояния, или
  2. Если пункт B является истинным, оцените B как часть вашего состояния:

Код:

if (($clauseA && A) || ($clauseB && B)) { 
    // Do Stuff 
} 
0

В булевой логики, это выражается как:

if (($clauseA && $a) || ($clauseB && $b)) 

Или какой-то их вариации, в зависимости от того, что именно вы хотите сделать. Суть в том, что вы можете выразить это, используя комбинацию && и ||, без if.

0

Если A и B являются логическими условиями, которые только должны быть правдой, если $ clauseA или $ clauseB истинен, а также, просто переписать ваше состояние так:

if((!$ClauseA || $A) && (!$ClauseB || $B)) { 
    // Do Stuff 
} 

Я просто применять законы де Моргана (http://en.wikipedia.org/wiki/De_Morgan 's_laws), чтобы выполнить это.

+0

У вас нет очень непринужденного простого способа позитивно не выразить это ...;) – deceze

0

В зависимости от следующего: $ clauseA может быть правдой, и/или $ clauseB может быть правдой, но оба могут быть ложными:

if ((($clauseA || $clauseB) && A) || ($clauseB && B)) 
{ 
    // Doing some stuff  
} 
Смежные вопросы