2013-05-16 16 views
6

Wiem, że można przypisać zmienną w stanie jak ten:Przypisanie zmiennej wewnątrz stanie jeśli prawdziwej

if ($var = $foo)

Jednak nie trzeba robić nic w samej kondycji, więc jestem często pozostawione z pustymi nawiasami. Czy mogę po prostu przypisać $var, jeśli $foo jest w inny sposób, bez potrzeby robienia czegoś później?

Również mogę przypisać $var do $foo jeśli $foo jest true ale jeśli $foo jest false zrobić coś innego? Podobnie jak:

if ($var = !$foo) { 
    if ($var = !$bar) { 
     //Etc... 
    } 
} 

Zasadniczo chcę mieć więcej fallbacks/defaults.

+0

Ermmmm, chodź jeszcze raz ...? –

+1

Możesz użyć 'if ($ foo)', to zadziała, gdy foo będzie prawdziwe. –

+0

Nie przypisujesz "w warunku". Przypisujesz niezależnie od wartości '$ foo'.Więc jeśli chcesz tylko nadpisać '$ var' z' $ foo' w przypadku '$ foo' jest * truthy *. Musisz przenieść zadanie. Lub zrób coś w stylu 'if ($ foo && $ var = $ foo) {}' chociaż to ostatnie jest naprawdę okropne w mojej opinii. – Yoshi

Odpowiedz

8

@ sugestią chandresh_cool jest w porządku, ale w celu umożliwienia wiele mozliwosci/fallbacks trzeba by gniazdo trójoperandowy wyrażeń:

$var = ($foo == true) ? $foo: 
     ($bar == true) ? $bar: 
     ($fuzz == true) ? $fuzz: 
     $default; 

Uwaga: pierwsze 3 wiersze kończą się dwukropkami, a nie średnikami.

jednak prostszym rozwiązaniem jest wykonanie następujących czynności:

$var = ($foo||$bar||$fuzz...); 
+0

Twoje prostsze rozwiązanie jest dokładnie tym, czego szukam. Jest krótki, słodki i robi to, co jest mi potrzebne: ustaw $ var na pierwszą dodatnią wartość, jaką może znaleźć. – Jared

+0

Jeśli wybierasz pierwszą opcję, nie rób tego "== true", po prostu zrób "$ var = ($ foo)? $ ....." – Veda

3

Zamiast tego można użyć operatora potrójny jak ten

$var = ($foo == true)?$foo:"put here what you want"; 
+0

Nadal jest trochę rozwlekły, ale działa, więc dam ci +1 za odpowiedź. – Jared

3

można przypisać wartości tak:

$var = $foo; 

Ustawienie ich w instrukcji if jest również możliwe, PHP oceni wynikowy $ var którą właśnie przydzieliłeś.

I naprawdę nie dostać na to pytanie, ale można zrobić coś takiego:

if(!($var = $foo)){ 
    //something else. 
} 
+0

Twój kod instrukcji if wygląda jak to, co próbuję zrobić, ale odpowiedź RobJ była lepsza. Nadal dam ci +1. – Jared

4

Chociaż jest to bardzo stary słup. Logika awaryjna na fałszujących wartościach może być kodowana w ten sposób.

$var = $foo ?: $bar ?: "default"; 

W tym przypadku, gdy $foo jest wartością sfałszowany (jak fałszywy, pusty ciąg znaków, itp) spadnie z powrotem do $bar inaczej używa $foo. Jeśli słupek jest sfałszowaną wartością, zostanie przywrócony ciąg znaków default.

Należy pamiętać, że działa to z podrobionymi wartościami i nie tylko true.

przykład:

$foo = ""; 
$bar = null; 
$var = $foo ?: $bar ?: "default"; 

$var będzie zawierać tekst default ponieważ puste struny i null są uważane za "false" wartości.

+0

@jconder - cofam się Twoja edycja do tej odpowiedzi. Leroy mówi "w przeciwnym razie używa' $ foo' ", ale twoja edycja całkowicie je unieważnia. Leroy celowo używa tu * dwóch * operatorów potrójnych (każdy z pierwszym pustym wyrażeniem), pozwalając na 3 możliwe wyniki: '$ foo',' $ bar' lub '" default "' zamiast używania pojedynczego operatora trójskładnikowego która może zwrócić tylko 2 możliwe wyniki: '$ bar' lub' "default" '. – HPierce

+0

Tak, masz rację, moje złe, przegapiłem cały punkt postu. – jconder

+0

Powoduje to, że wyrażenia o wiele czystsze. Używam tego do sprawdzenia niestandardowego typu wpisu w WordPress '$ is_entry = is_singular ('myentry')?: Is_post_type_archive ('myentry')?: False;'. Teraz mogę użyć 'if ($ is_entry && $ other_condition)', aby określić, czy bieżąca strona należy do mojego typu postu bez wyrażenia, jeśli wyrażenie jest zbyt brzydkie. – iyrin

Powiązane problemy