2012-11-22 6 views
5

Od PHP 5.3 można pominąć środkową część operatora trójskładnikowego . Wyrażenie wyrażenie1?: Wyrażenie3 zwraca wyrażenie1, jeśli wyrażenie1 ma wartość PRAWDA, a wyrażenie 3 w przeciwnym wypadku.Jeszcze bardziej zwięzły sposób ustawiania wartości domyślnych?

Czy istnieje jakaś lepsza lub bardziej zwięzła metoda niż poniższy kod w celu ustawienia domyślnej wartości zmiennych?

$v = isset($v) ? $v : "default value"; 

Odpowiedz

2

Oto krótsza składnia:

isset($v) || $v="default value"; 
0

Nie. To właściwa droga, jeśli nie wiesz, czy ustawiono $v.

0

Nie ma mowy. Jeśli używasz operatora trójskładnikowego.

6

TL; DR - Nie, to wyrażenie nie może być wykonane krócej.

To, czego potrzebujesz, to skrócone potrójne wyrażenie do wykonania domyślnego isset(). Zostało to omówione na mailing list i zostało stworzone ifsetor RFC, które obejmuje również tę koncepcję.

Ponieważ skrócona operatora trójskładnikowych istniała już w momencie powyższej dyskusji, coś takiego było proposed użyciu nieistniejącego operatora ??:

// PROPOSAL ONLY, DOES NOT WORK 
$v = $v ?? 'default value'; 

Przypisywanie 'default value' jeśli $v jest niezdefiniowany.

Jednak nic takiego jak dotąd nie zostało zaimplementowane w głównym języku. Do tego czasu to, co napisałeś, nie może być krótsze.

Ten straszne konstrukt jest krótsza, ale należy pamiętać, że jest to nie ten sam ponieważ przypisuje wartość domyślną, jeśli zmienna istnieje, ale ocenia się false:

// DO NOT USE 
$v = @$v ?: 'default value'; 
+1

Co jeśli '$ v' jest już ustawiony i to' „” ' lub '0' lub' null' lub 'false'? – Carlos

+1

Rozumiem. Ale nie sądzę, że to dobre podejście ... – Carlos

+1

@jackflash Stąd moja wzmianka o "okropnym konstrukcie" –

2

Wystarczy poprosił this i Wskazywano tutaj . Tak więc w przypadku używasz key o array, to może być poprawa

function isset_get($array, $key, $default = null) { 
    return isset($array[$key]) ? $array[$key] : $default; 
}