2008-10-02 19 views
24

Powiel możliwe:
PHP equivalent of a Ruby assignment idiomustawiania wartości domyślnych (cesja warunkowa)

W Ruby można łatwo ustawić domyślną wartość dla zmiennej

x ||= "default" 

Powyższe oświadczenie ustawi wartość x na "default", jeśli x jest zerowe lub fałszywe

Czy istnieje podobny skrót w PHP czy muszę korzystać z dłuższą formę:

$x = (isset($x))? $x : "default"; 

czy są jakieś łatwiejsze sposoby, aby sobie z tym poradzić w PHP?

+6

notatkę zamykania: wydaje mi się lepsze pisemne pytanie, przy lepszej odpowiedzi; plus, to jest starsze – kdgregory

Odpowiedz

1

myślę, że już forma jest już skrót dla PHP ... i nie będę go używać, ponieważ to nie jest dobre do czytania

Niektóre ogłoszenia: W ramach symfony większość „dostać „-Methods mieć drugi parametr w celu określenia wartości domyślnej ...

8
isset($x) or $x = 'default'; 
+4

To będzie działać tak długo, dopóki nie uznamy fałszywych wartości $ x za "ustawione". –

+0

$ x === false i $ x = 'default'; isset ($ x) lub $ x = 'default'; –

+0

Bardzo podoba mi się 'isset ($ x) lub $ x = 'default';' version; powinieneś zaktualizować swoją odpowiedź. :-) –

2

ja owinąć go w funkcji:

function default($value, $default) { 
    return $value ? $value : $default; 
} 
// then use it like: 
$x=default($x, 'default'); 

Niektórzy ludzie mogą nie podoba, ale utrzymuje twój kod czystszy, jeśli wykonujesz szalone wywołanie funkcji.

+1

"Problem" z zawijaniem go w wywołaniu funkcji polega na tym, że wszystkie argumenty zostają ocenione. W a = b || c, c otrzymuje ocenę tylko wtedy, gdy b jest falsey. To może, ale nie musi być to, co chcesz. – KaptajnKold

+0

Można mieć nadzieję, że tak naprawdę nie nazywasz metod wywołujących efekt uboczny w zadaniu. –

+0

@KaptajnKold Możesz przekazać przez ref, wtedy argumenty nie będą evald;) – NikiC

35

Począwszy od PHP 5.3 można użyć operatora potrójny pomijając środkowy argument:

$x = $x ?: 'default'; 
+1

Dlaczego ta elegancja nie jest bardziej znana? Ogólnie uważam, że mam prawie pedantyczną znajomość PHP, ale wydaje mi się, że ten klejnot mi umknął. Dziękuję Ci!! – orca

+0

PHP 5.3 Chociaż. Nie mogę się doczekać, to jest wymagany standard dla Wordpress, ponieważ rozwijam Wordpress Themes. Ale jest to kiepski operator trójskładnikowy :) – Norris

+1

Problem polega na tym, że PHP może rzucić uwagę na niezdefiniowaną zmienną, a jeśli zrobisz to dużo, to zaśmieci dane wyjściowe/logi w zależności od ustawionego poziomu raportowania do. – jerseyboy

Powiązane problemy