2012-10-31 18 views
16

Próbuję przekonwertować poniższy kod na Ternary Operatora, ale to nie działa i nie jestem pewien dlaczego. Myślę, że moim problemem jest to, że nie wiem, jak wyrazić operację elseif w formacie potrójnym. Z mojego rozumowania i elseif jest wykonywana w taki sam sposób, jak operacja if przy użyciu formatu : (condition) ? 'result'.PHP Elseif Ternary Operators

if ($i == 0) { 
    $top = '<div class="active item">'; 
} elseif ($i % 5 == 0) { 
    $top = '<div class="item">'; 
} else { 
    $top = ''; 
} 

$top = ($i == 0) ? '<div class="active item">' : ($i % 5 == 0) ? '<div class="item">' : ''; 
+7

Whydoyouwantomakeyoursourcodeodereadreadable? – VolkerK

+1

Nie, ale chcę wiedzieć, jak sobie poradzić z 'ifelse'. – Jon

+0

Jak powiedział @ VolkerK, zagnieżdżanie potrójnych operatorów wcale nie jest dobrym pomysłem. Powinieneś tego unikać. – Carlos

Odpowiedz

34
$top = ($i == 0) ? '<div class="active item">' : (($i % 5 == 0) ? '<div class="item">' : ''); 

trzeba dodać nawias wokół całego inny blok

14

trójoperandowy operator nie obsługuje prawdziwego if... else if... else... operację; jednak można symulować za pomocą następującego techniką

var name = (variable === 1) ? 'foo' : ((variable === 2) ? 'bar' : 'baz'); 

Osobiście nie dbam o to, jak nie znajdę to bardziej czytelne lub elegancki. Zazwyczaj wolę instrukcję switch.

switch (variable) { 
    case 1 : name = 'foo'; break; 
    case 2 : name = 'bar'; break; 
    default : name = 'bas'; break; 
} 
3

Zbyt późno prawdopodobnie podzielić się poglądów, ale mimo wszystko :)

  1. Zastosowanie if - else if - else dla ograniczonej liczby ocen. Osobiście wolę używać, jeśli - inaczej, jeśli - w przeciwnym razie liczba porównań jest mniejsza niż 5.
  2. Użyj przełącznika, w którym liczba ocen jest większa. Osobiście preferuję switch-case, w przypadkach, w których liczba przypadków przekracza 5.
  3. Używaj ternary, gdy rozważane jest pojedyncze porównanie (lub pojedynczego porównania w pętli), lub gdy w klauzuli "case" struktura przełącznika.
  4. Korzystanie z trójskładnika jest szybsze przy porównywaniu podczas pętli w bardzo dużym zbiorze danych.

IMHO Jego wreszcie deweloper, który decyduje równania kompromis między czytelności kodu i wydajność a to z kolei decyduje, co z potrójnego vs., jeżeli inny, jeśli jeszcze vs. switch-case, mogą być wykorzystane w dowolny konkretna sytuacja.

Powiązane problemy