2009-09-09 12 views
10

Mi escenario:MySQL IFNULL equivalente para php

$exTime = get_cfg_var("session.gc_maxlifetime")?get_cfg_var("session.gc_maxlifetime"):1440; 

me gustaría que fuera como MySQL:

$exTime = isnull(get_cfg_var("session.gc_maxlifetime"),1440); 

o algo parecido, que también pondría a prueba para idealmente FALSO. ¡De esa forma solo tendría que llamar a la función una vez!

Sé que podría simplemente asignarlo a una var, pero eso agregaría otra línea a mi código (¡oh nooes!). Es realmente algo cosmético, creo que sería más fácil de leer. De todos modos, google no me ha ayudado (en b4 alguien me ha demostrado que estaba equivocado). ¡Gracias!

+0

@andre sí ... Soy consciente de que me podría escribir una función para hacerlo, realmente estoy tratando de averiguar si hay alguna forma incorporada que no sepa. Parece que la respuesta es "no", pero voy a aguantar un poco. Hubo un tiempo en el que no sabía conciso si, así que pensé, eh, ¡quizás esto también esté incorporado! Gracias sin embargo. –

+0

Retrocedí para quitar la etiqueta "mysql". Esta pregunta no tiene que ver con mysql, solo quería un poco de funcionalidad php * como * un poco de funcionalidad mysql. –

Respuesta

12

A partir de PHP 5.3 también se puede utilizar el short ternary operator:

$exTime = get_cfg_var("session.gc_maxlifetime") ?: 1440; 

Esto es, básicamente, su funcionalidad prevista, pero sin tener que declarar la función. En las versiones de PHP anteriores a 5.3, debe ir con la respuesta de André.

Tenga en cuenta sin embargo, que llama a la función podría lanzar advertencias, si se trata de comprobar matrices en las que las claves no se especifican:

$array = array(
    0 => array(
     0 => 100 
    ) 
); 

$example = isNull($array[0][1], 200); 
+0

¿Esto no asignará VERDADERO a $ exTime si se establece session.gc_maxlifetime? Esto realmente no lo hace por mí, porque necesito $ exTime para mantener el valor de retorno de get_cfg_var ("session.gc_maxlifetime") * a menos que sea nulo/falso *, no para mantener TRUE o 1440. (Supongo que eso " isnull "is really" is_null "y no estás usando la función de andré). ¡Gracias, sin embargo, no sabía sobre el ternario corto! –

+0

espera un segundo, solo elimina el contenedor "isnull" y ese es el ticket! ¡Gracias! http://www.asgrim.com/2009/06/30/awesome-short-ternary-operators/ –

+0

Solo para completar, aquí hay un enlace a los documentos PHP, donde se menciona el operador ternario corto: http: // www.php.net/manual/en/language.operators.comparison.php#language.operators.comparison.ternary – mtnorthrop

3

¿Qué le parece agregar esta pequeña función?

function isnull($var, $default=null) { 
    return is_null($var) ? $default : $var; 
} 

no sé de cualquier función que hace lo que quiere, pero ya que no es que difícil de implementar que bien podría hacer eso si lo usa mucho.

+0

aún puede tener el error "Variable no definida" en este caso. –