2012-06-24 15 views
5

Duplicar posibles:
php false place in conditionOrden en sentencias condicionales

me he dado cuenta de que una gran cantidad de código PHP utiliza sentencias condicionales como CONST == variable. Crecí con la sintaxis siempre articulada al revés. ¿Hay alguna razón para esta estructura?

Ejemplo:

// this is the way I see it most typically represented in PHP 
if (false == $foobar) { // do this } 

// this is the way I normally do it 
if ($foobar == false) { // do this } 
+2

A menudo se llama una "condición de Yoda". Algunas personas lo usan para evitar errores de asignación en lugar de igualdad. Mi opinión no es introducir errores tipográficos, en lugar de una extraña convención de codificación para protegerse contra ellos. –

+0

es mejor: if (! $ Foobar) {// hacer esto} –

+0

pero ambos tienen el mismo resultado –

Respuesta

8

Esto es para evitar un error tipográfico común entre == y =, conocido como una condición yoda. Considere lo siguiente:

if(false = $foobar) { 

Esto daría lugar a un error, la captura de lo que se consideraría un error, ya que no se puede asignar a cualquier cosa false. Por el contrario:

if($foobar = false) { 

Esta es una sintaxis válida, y es un error bastante fácil de realizar.

Sin embargo, normalmente prefiero la sintaxis if($foobar == false), ya que las pruebas unitarias deben ser capaces de detectar estos errores programáticos.

+0

Me pregunto por qué alguien quisiera probar '' $ foobar == false', cuando 'simple! $ foobar' debería haber sido suficiente.) Por supuesto, '$ foobar === false' es completamente otra historia.) – raina77ow

+0

@ raina77ow En PHP y algunas otras langs tipadas dinámicamente, boolean 'FALSE' es una cosa específica separada de" falsedad ". Considere '$ var =" "';. '! $ var' es verdadero, pero a veces necesita verificar que en realidad es booleano' FALSE'. –

+0

Con PHP, ayuda a las funciones que devuelven '0' y' false', p. Ej. 'strpos()'. Entonces, '$ foobar = strpos ($ haystack, $ needle);' puede tener un valor de retorno válido de '0', o' falso' en caso de error. – nickb

Cuestiones relacionadas