2010-08-18 9 views
7

¿Cómo debe la siguiente expresión booleana ser escrito en PHP:¿Cómo deberían escribirse expresiones booleanas en PHP?

$foo = ""; 
if($var==TRUE){ 
    $foo = "bar"; 
} 

o

if($var==TRUE){ 
    $foo = "bar"; 
}else{ 
    $foo = ""; 
} 

o

$foo = ($var==TRUE) ? "bar": ""; 
+0

Gracias George, lo publiqué a las 16.55 justo antes de irme del trabajo, podría haber aclarado el título y la frase de apertura en retrospectiva. :) – Stann0rz

Respuesta

8

En primer lugar, true no es una constante, es una ficha, por lo que no se mayúsculas (Sé que algunas normas hacer eso, pero creo que se confunde el significado) ...

En segundo lugar, no necesita la comparación redundante $var == true dentro del if. Es exactamente lo mismo que if ($var) { (Para una comparación doble ==. Una comparación idéntica === debería ser explícita).

En tercer lugar, prefiero la preinicialización. Entonces:

$foo = ''; 
if ($var) { 
    $foo = 'one status'; 
} else { 
    $foo = 'another status'; 
} 

Si no necesita la rama else, solo quítela. Prefiero la preinicialización, ya que te obliga a inicializar la variable, y evita los casos en los que te olvidas de inicializarla en una de las ramas. Además, le da una pista de tipo cuando vuelve a leer la función más tarde ...

Y para una rama simple como esa, usar la sintaxis ternaria está bien. Si hay una lógica más compleja, me quedaría lejos sin embargo:

$foo = $var ? 'bar' : ''; 
+0

Para ser honesto, los códigos anteriores no guardan relación con lo que estoy trabajando actualmente y fue algo que sorprendí en unos segundos para poder aclarar la pregunta, los valores booleanos parecían más lógicos que comparación de cadena o entero. La preinicialización es algo que siempre he hecho, pero nunca me han 'enseñado' PHP o cualquier otro idioma y solo me preguntaba si había una mejor práctica para esto. Gracias por el consejo ircmaxell. – Stann0rz

5

Todos los trabajos. Es preferencia. Consideraría inicializar la variable primero como lo hace en el primer ejemplo. Pero por algo tan simple, la tercera opción está bien en mi libro.

Además, el tercero no tiene que ser tan prolijo si $ var es un valor booleano:

$foo = $var ? "bar" : ""; 
+3

A menos que estén específicamente buscando cierto, entonces querrá usar $ foo = ($ var === TRUE)? "bar" : ""; – Codeacula

1

me gusta la primera de ellas:

$foo = ""; 
if($var==TRUE){ 
    $foo = "bar"; 
} 

Como está claro, conciso, y fácil de leer.

0

No importa mucho. Me gusta el primero cuando hay muchos otros para que sepa que la variable siempre se inicializa. Pero es realmente solo una cuestión de preferencia.

Al igual que las comillas, me gusta usar las únicas en php. Hay una buena razón :)

+0

Ah, y el tercero podría ser tan fácilmente $ foo = $ var? 'bar' : ''; –

+0

Tiendo a usar una combinación de citas dependiendo de lo que publico en ese momento, las cadenas de HTML tienden a generarse usando comillas simples, mientras que creo que las comillas dobles son la única manera de generar un nuevo salto de línea. - "\ r \ n" – Stann0rz

0

La respuesta correcta, ya que a menudo es el caso es "depende". En este caso,

if ($var==TRUE) $foo = "bar"; 
else $foo = ""; 

es muy claro. Pero, ¿cuál es tu contexto?

En general, el operador terciario, su tercera opción, debe usarse con extrema precaución, ya que es muy difícil de leer.

Pero piense en términos de lo que quiere que signifique su código, más de lo que HACE. ¿Desea establecer su $ foo en un valor "normal" y luego anularlo? ¿O desea establecer algo que depende de qué $ var es?

Algo que encuentro útil para cambiar, que no es directamente lo que pide, pero que es similar, es este, desde

function func() { 
    ... 
    if ($condition) { 
     do plenty 
     of things 
    } 
    else { 
     do plenty 
     of things 
    } 
} 

que, por lo general gusta cambiar a:

function func() { 
    ... 
    if ($condition) { 
     do plenty 
     of things 
     return; 
    } 
    do plenty 
    of things 
} 

Por lo general, tiene sentido.

Simplemente pregúntese: "Si alguien que no sabía nada sobre mi código lo leyera, ¿tendría sentido para él? ¿O ella?"

1

Prefiero el primero (a excepción de la prueba redundante para el booleano) porque funciona de manera consistente en todos los idiomas, particularmente aquellos que requieren declarar la variable (y tal vez tipificarla) antes de establecerla.
Java:

String foo = ""; 
if (var) { 
    foo = "Something"; 
} 

JavaScript o JavaFX:

var foo = ""; 
if (var) { 
    foo = "Something"; 
} 

Etc.
se puede utilizar la tercera forma también, pero si la condición (o asignación) es complejo, que es un poco menos legible .

Cuestiones relacionadas