2011-06-22 7 views
11

Tengo una cadena que quiero adjuntar a otra cadena. digamos:PHP si abreviatura

$my_string = 'Hello'; 

$my_string .= ' there'; 

esto devolvería 'Hola'.

quiero condicionar esto así:

$my_string = 'Hello'; 

$append = 'do'; 

if ($append == 'do') { 

    $my_string .= ' there'; 

} 

Ahora, yo quiero utilizar una operación ternaria de hacer esto, pero todos los ejemplos que encontré son para if/else wich será algo así como :

$my_string .= ($append == 'do') ? ' there' : ''; 

así que ¿es posible hacerlo solo con IF y sin más?

Gracias.

+4

¿no se puede concatenar una cadena en blanco para más? – Claudiu

+1

¿Está bien solo usar una expresión que sea menos complicada, p. no usando el operador ternario, ¿pero solo uno lógico? – hakre

+0

Pruebe if (condición) return true; –

Respuesta

17

n ... ternaria significa tres piezas que necesita la condición, la parte real y la parte falsa

22

Nop. Sin embargo, lo opuesto es posible. He aquí una cita de la documentación de PHP:

A partir de PHP 5.3, es posible dejar de lado la parte media del operador ternario. Expresión expr1?: Expr3 devuelve expr1 si expr1 se evalúa como VERDADERO, y expr3 en caso contrario.

http://php.net/manual/en/language.operators.comparison.php

4

Usted puede hacer esto:

($append == 'do') ? $my_string .= ' there' : $noop ; 

Si se invierte la declaración para que el ternario está en el exterior en lugar del interior de la asignación, entonces se puede poner toda declaración en la parte TRUE, luego simplemente haz algo que sea un comando sin operación en la parte ELSE.

11

combinando mellamokb y andz usted puede hacer esto:

($append != 'do') ?: $my_string .= ' there'; 
+2

+1 iba a decir eso, pero no pudo probarlo correctamente en ideone :(Parece que se está volviendo ilegible en el límite y no lo recomendaría. – mellamokb

+0

Eso es inútil, es el operador incorrecto. Utilice 'OR' o '||', pero no '?'. – hakre

1

Se puede crear una función que hace lo que quiere. En lugar de escribir la declaración if cada vez.

function doAppend($doIt, &$value, $appendValue) 
{ 
    if($doIt) $value .= $appendValue; 
} 

llamada con:

doAppend($append == 'do', $my_string, ' there'); 

Nota cómo el segundo parámetro es por referencia, por lo que puede cambiar en el código de llamada también.

4

Una forma alternativa para comprobar si hay una condición y luego anexar a la cadena sería:

($append == 'do') and ($my_string .= ' there'); 

Pero eso es realmente sólo un desplazamiento if a continuación. Pero se acerca a un "ternario sin el otro".

+0

No hay necesidad de corchetes – hakre

+0

@hakre: Lo tenía originalmente sin. Pero noté que a menudo se entiende mejor por explicación. – mario

+0

Sí, estuve un poco irritado cuando tropecé con ellos. puede hacer que las cosas sean más fáciles de leer, como el espacio en blanco que también podría descartarse, pero nadie lo haría, al menos no en general. – hakre

3

Si está pensando en acortar el código, puede escribir lo mismo en una sola línea.

if ($append == 'do') {$my_string .= ' there';} 

EDITAR

acabo de descubrir esto y pensamiento son útiles. También puede escribir el bloque if como esta

if ($append == 'do') $my_string .= ' there'; 
0

No se puede utilizar el ternaria sin la parte else/falso, pero si su objetivo es tener todo en una línea que podría sugerir que probar esta alternativa:

($append == 'do' && $my_string .= ' there'); 

Si el primero es verdadero, procederá con la segunda instrucción. De lo contrario, simplemente se detendrá después de que la primera evaluación resulte falsa.

refieren a la evaluación perezosa (el llamado Short-circuit evaluation)

o se puede hacer lo contrario, dejando la verdadera si parte vacía, y declarar sólo la falsa, como andz señala correctamente.

Cuestiones relacionadas