with strip_tags remove ent_quotes ejemplo php coding-style

php - strip_tags - ¿Por qué las asignaciones en condiciones son malas?



strip_tags wordpress (6)

En los lenguajes que siempre devuelven un valor en las tareas no es malo (creo que es bastante común en los lenguajes funcionales), pero (como otros ya han dicho mientras escribía esto), por lo general, se debe evitar ya que usted u otra persona podrían confundirlo con un comparación. El compilador generalmente debería advertir al respecto, pero puede ignorarse si está seguro de lo que está haciendo ...

Estoy usando NetBeans para PHP 6.5.

En mi código, frecuentemente uso el siguiente tipo de comando:

if (($row = $db->get_row($sql))) { return $row->folder; } else { return FALSE; }

Netbeans me dice que no debería estar usando asignaciones en la declaración IF.

Por qué ?


Los uso todo el tiempo, con bucles (no estoy seguro de por qué eso marcaría la diferencia), como:

$counter = 0; while( $getWhateverDataObj = mysql_fetch_object( $sqlResult )) { $getWhateverObj->firstName[$counter] = $getWhateverDataObj->firstName; $getWhateverObj->lastName[$counter] = $getWhateverDataObj->lastName; $counter++; }

Y funciona bien


No son malos, pero pueden conducir a errores peligrosos.

En c idiomas similares, donde una asignación es una expresión (para apoyar, por ejemplo, a = b = c = 1;) un error común es:

if (a = 1) { .. }

Pero querías tener

if (a == 1) { .. }

Algunos desarrolladores han aprendido a escribir

if (1 == a) { .. }

Para crear un error si se olvida uno ''=''. Pero creo que no mejora la legibilidad.

Sin embargo, los compiladores modernos, den una advertencia si escribes

if (a = 1) { .. }

que creo que es una mejor solución. En ese caso, estás obligado a comprobar si fue lo que realmente quisiste decir.


Probablemente esté intentando ayudarte a evitar el temido error tipográfico:

if(a = b) //logic error

Aunque esperaría un ambiente lo suficientemente inteligente como para advertirte sobre eso, también para ser lo suficientemente inteligente como para tener condiciones de "oh, no te preocupes por ese caso".


¿Cómo se vería un código si no se asigna el valor $ row en la condición de bucle esto sería mucho más complicado, creo ... aunque no es tan bueno para leer para algunos mantenedores, ¿no? bueno, puedes hacerlo como

$next = mysql_fetch_assoc($result) do{ ... ... ... $next = mysql_fetch_assoc($result) or break; }while ($next)


Condicionales a menudo incluyen operadores de cortocircuito. Entonces, dado este ejemplo:

if ( a=func(x) && b=func(y) ) { // do this }

Puede no ser inmediatamente obvio, pero la segunda asignación solo ocurriría si la primera devuelta >0 , y si func(y) tuviera otros efectos secundarios que usted esperaba, tampoco sucederían.

En resumen, si sabes lo que estás haciendo y entiendes los efectos secundarios, entonces no tiene nada de malo. Sin embargo, debes considerar la posibilidad de que alguien más pueda estar manteniendo tu código cuando te hayas ido y que quizás no tengan tanta experiencia como tú.

Además, los futuros mantenedores pueden pensar que tiene la intención de lo siguiente:

if ( a==func(x) && b==func(y) ) ...

Si "arreglan" tu código, en realidad lo rompen.