2008-10-02 18 views
24

Duplicar posibles:
PHP equivalent of a Ruby assignment idiomvalores de configuración por defecto (asignación condicional)

En Rubí se pueden crear fácilmente un valor predeterminado para una variable

x ||= "default" 

La declaración anterior establecerá el valor de x en "predeterminado" si x es nulo o falso

¿Hay un acceso directo similar en PHP o tengo que utilizar la forma más larga:

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

¿Hay maneras más fáciles de manejar esto en PHP?

+6

nota a cerradores: esta me parece la mejor pregunta por escrito, con mejores respuestas; Además, es más antiguo – kdgregory

Respuesta

1

creo que su forma más larga ya es el acceso directo para php ... y yo no lo usaría, porque no es bueno para leer

Algunos aviso: En el marco Symfony mayoría de los "conseguir "-Métodos tienen un segundo parámetro para definir un valor por defecto ...

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

Eso funcionará siempre que no consideremos valores falsos de $ x para 'establecer'. –

+0

$ x === falso y $ x = 'predeterminado'; isset ($ x) o $ x = 'predeterminado'; –

+0

Me gusta mucho la versión 'isset ($ x) or $ x = 'default';'; deberías actualizar tu respuesta. :-) –

2

envuelvo en una función:

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

que algunas personas no les guste, pero mantiene tu código más limpio si estás haciendo una llamada a función loca.

+1

El "problema" al envolverlo en una llamada a función es que se evalúan todos los argumentos. En a = b || c, c solo se evalúa si b es falsey. Esto puede o no ser lo que quieres. – KaptajnKold

+0

Uno esperaría que de todos modos no estés llamando métodos de efecto secundario en una tarea. –

+0

@KaptajnKold Puede pasar por ref, entonces los argumentos no serán evadidos;) – NikiC

35

A partir de PHP 5.3 se puede utilizar el operador ternario mientras se omite el argumento central:

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

¿Por qué esta elegancia no es más conocida? Generalmente siento que tengo un conocimiento casi pedante de PHP, pero esta gema parece haberse escapado de mí. ¡¡Gracias!! – orca

+0

PHP 5.3 Aunque. No puedo esperar, es un estándar obligatorio para Wordpress, ya que desarrollo Wordpress Themes. Pero ese es un operador ternario rudo allí :) – Norris

+1

Un problema con esto es que PHP puede lanzar un aviso sobre una variable indefinida, y si lo haces un montón desordenará la salida/registros dependiendo de lo que tengas configurado el nivel de informes a. – jerseyboy

Cuestiones relacionadas