2011-04-29 10 views
27

Todos lo hemos encontrado antes, necesitando imprimir una variable en un campo de entrada pero sin saber con certeza si la var está establecida, así. Básicamente esto es para evitar un e_warning.¿Cuál es la abreviatura de PHP para: imprimir var si var existe

<input value='<?php if(isset($var)){print($var);}; ?>'> 

¿Cómo puedo escribir esto más corto? Estoy bien la introducción de una nueva función como esta:

<input value='<?php printvar('myvar'); ?>'> 

Pero no tener éxito en la escritura la función printvar().

+6

'eco (? Isset ($ var) $ var: '')' es casi tan corto como se puede obtener y ser sintácticamente correcta. –

+0

sin hacer una función para ello, creo que @Marc B ha proporcionado la forma más corta de hacerlo ... ¡en un comentario nada menos! – afuzzyllama

Respuesta

59

Mi recomendación sería la creación de una función issetor:

function issetor(&$var, $default = false) { 
    return isset($var) ? $var : $default; 
} 

Esto toma una variable como argumento y lo devuelve, si existe, o un valor por defecto, si no lo hace. Ahora se puede hacer:

echo issetor($myVar); 

Pero incluso, utilizarlo en otros casos:

$user = issetor($_GET['user'], 'guest'); 

A partir de PHP 7 puede utilizar el null-coalesce operator:

$user = $_GET['user'] ?? 'guest'; 

o en su uso:

<?= $myVar ?? '' ?> 
+1

¿Por qué está haciendo una llamada por referencia? ¿No es suficiente valor? Además, el valor predeterminado es una palabra clave en PHP, podría ser aconsejable no usar eso como nombre de función. Tuve resultados extraños en mi servidor. – afuzzyllama

+11

@afuzzyllama: Porque necesito pasar una variable potencialmente indefinida. Si omití la referencia, le daría un Aviso Variable Indefinido;) – NikiC

+1

¡Es bueno saberlo, gracias! – afuzzyllama

0

Mejor utilizar un motor de plantilla adecuado - https://stackoverflow.com/q/3694801/298479 menciona dos bonitos.

Ésta es tu función de todos modos - que sólo funcionará si existe el var en el ámbito global:

function printvar($name) { 
    if(isset($GLOBALS[$name])) echo $GLOBALS[$name]; 
} 
+0

Lo sentimos, en busca de una solución para vars no globales. – bart

+0

En este caso ... obtenga un motor de plantilla. – ThiefMaster

-4
$var; 
(isset($var)) ? (print $var) : ''; 

$var = 'hello var'; 
(isset($var)) ? (print $var) : ''; 
+2

Eso ni siquiera es válido PHP ... – ThiefMaster

+0

Bastante complejo ... Me refiero a muchas oportunidades para escribir errores de sintaxis. – bart

+0

ugh ... ok Lo arreglé –

2
<input value='<?php @print($var); ?>'> 
+14

La supresión de error/advertencia/aviso es bastante sucia. – ThiefMaster

+12

Lo diré de nuevo: Dios mío * por favor * no suprima los errores .. –

+3

Está sucio si está suprimiendo un error real. ¿Realmente vale la pena gastar el tiempo o aumentar la complejidad del código cuando una solución más simple será suficiente? Siempre que sepa qué está haciendo y por qué se suprime la advertencia, está bien. –

0

Usted podría hacer <?php echo @$var; ?>. O <?= @$var ?>.

+15

La supresión de error/advertencia/aviso es bastante sucia. – ThiefMaster

+8

Oh querido Dios * por favor * no suprimas errores .. –

+3

@demian/ladrón: Estoy de acuerdo si fue para suprimir el error de una función, pero francamente, supresando la advertencia "no definida" en una variable en una situación de salida está permitido –

-1
<input value='<?php printvar(&$myvar); ?>' /> 

function printvar(&$val) { 
    if (isset($val)) echo $val; 
} 
+0

No funcionará. Pasar la var a la función causará el aviso.No estoy seguro de si funcionaría con una referencia ... podría valer la pena intentarlo. – ThiefMaster

+0

@ThiefMaster: Pensó lo mismo al mismo tiempo :-) – mellamokb

9

Otra opción:

<input value="<?php echo isset($var) ? $var : '' ?>"> 
+0

Sí, pero también emitirá un E_NOTICE. Comprobar si está configurado primero corrige esto. – Galen

+0

+1 y '' Lo hace aún más corto. –

0

hay actualmente nada en PHP que puede hacer esto, y realmente no se puede escribir una función en PHP para hacerlo bien. Se podría hacer lo siguiente para lograr su objetivo, pero también tiene el efecto secundario de la definición de la variable si no existe:

function printvar(&$variable) 
{ 
    if (isset($variable)) { 
     echo $variable; 
    } 
} 

Esto le permitirá hacer printvar($foo) o printvar($array['foo']['bar']). Sin embargo, la mejor manera de hacerlo es usar IMO isset todo el tiempo. Sé que es molesto, pero no hay buenas maneras de evitarlo. No se recomienda el uso de @.

Para obtener más información, vea https://wiki.php.net/rfc/ifsetor.

+0

¿No debería ser 'if (isset ($ variable)) {' –

+0

@ Rob2211 sí, buena captura :) – mfonda

1

La respuesta más corta que puedo llegar a es <?php isset($var) AND print($var); ?>

Más detalles están here on php manual.

Una alternativa simple a una instrucción if, que es casi como un operador ternario, es el uso de AND. Considere lo siguiente:

'; // Esta es una alternativa isset ($ value) AND print ($ value); ?>

Esto no funciona con echo() por algún motivo. ¡Encuentro esto extremadamente útil!

0

Esto funcionó para mí:

<?= isset($my_variable) ? $my_variable : $my_variable="Some Value"; ?> 
Cuestiones relacionadas