Foros del Web » Programando para Internet » PHP »

Cosa muy extraña....

Estas en el tema de Cosa muy extraña.... en el foro de PHP en Foros del Web. Código PHP: function  ejemplo ( $var = 0 ) { echo  "->>" . $var . "<--" ; if( $var  !=  0 ) { //Ejecuta las acciones } ...
  #1 (permalink)  
Antiguo 13/11/2010, 09:58
 
Fecha de Ingreso: agosto-2005
Ubicación: Valencia
Mensajes: 76
Antigüedad: 18 años, 7 meses
Puntos: 1
Cosa muy extraña....

Código PHP:
function ejemplo($var=0)
{

echo 
"->>".$var."<--";

if(
$var != 0)
{
//Ejecuta las acciones
}

Como veis es una función muy sencilla. Cuando se llama a la función asi:
Código PHP:
ejemplo() 
Devuelve: '->>0<--'
que se corresponde con el echo antes de la condición y puesto que $var=0, que es el valor predefinido de la variable en la declaración de la función, y como no se pasó valor alguno, toma éste; la condición del if no se cumple porque $var=0. Esto es lo que debe hacer ¿verdad? o al menos es lo que nuestra corta mente espera.

Pues bien a mi me esta ocurriendo que ejecuta todo lo contrario...

Cuando $var=0 la condicion la da como verdadera (pero yo le digo que $var != 0 !!)
Cuando llamo a la función pasándole un valor distinto:
Código PHP:
ejemplo(15
Devuelve: '->>15<--'
En el if devuelve false!!

No entiendo como si una variable antes del IF vale $var=2 y teniendo en IF una condición que es $var != 0 da FALSE

Voy a probar a reiniciar el servidor...

Alguien tiene alguna idea o le ha pasado algo similar??
__________________
Quien a buen árbol se arrima, buena sombra le cobija. :aplauso:

http://dbtrucos.com
  #2 (permalink)  
Antiguo 13/11/2010, 10:03
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 15 años, 11 meses
Puntos: 2534
Respuesta: Cosa muy extraña....

bueno, lo que dices no tiene fundamentos... la programación lógica se rige por la lógica, no puede realizar acciones que no sean programadas lógicamente...

te puedo asegurar que replicando tu ejercicio se obtienen los resultados correctos, quizá estas omitiendo algo y por ende te estas confundiendo...

aún así, no motivo alguno para que te funcione completamente al revés tu código!!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 13/11/2010, 10:08
 
Fecha de Ingreso: agosto-2005
Ubicación: Valencia
Mensajes: 76
Antigüedad: 18 años, 7 meses
Puntos: 1
Respuesta: Cosa muy extraña....

Vamos a ver el fragmento de código, que tiene el problema, a ver si entre todos vemos el problema:

Código PHP:
echo "->>".$organitzacio."<<-";
        
        
//Açò és necessari per a l'ordenació
        
if($organitzacio != 0)
        {
            echo 
$organitzacio;
            echo 
"entra";
            
            if(
$sentit == 0)
            { 
Ahora supongamos, que el valor que tiene $organitzacio='titol' (que es el valor real al hacer la pruebas)

cuando ejecutas el código, aparace el resultado del echo: ->>titol<<-
pero el IF nunca se ejecuta, si $organitzacio != 0
No lo entiendo.
__________________
Quien a buen árbol se arrima, buena sombra le cobija. :aplauso:

http://dbtrucos.com
  #4 (permalink)  
Antiguo 13/11/2010, 10:11
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 14 años, 7 meses
Puntos: 150
Respuesta: Cosa muy extraña....

Te ocurre es porque al hacer

if($organitzacio != 0)

el PHP lo que hace es pasar $organitzacio a un valor numerico para poder compararlo, y al ser texto lo valora como 0, por eso no entra. Deberias poner asi:

if($organitzacio != "")


o

if ( !isset($organitzacio) )
  #5 (permalink)  
Antiguo 13/11/2010, 10:13
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 15 años, 11 meses
Puntos: 2534
Respuesta: Cosa muy extraña....

prueba así:
Código PHP:
$foo 'bar';
if (
$foo !== 0) echo "xD"
según la prueba que hice, no funcionaba cuando ponemos != pero si con !==

sería bueno que consultes esta tabla:
http://www.blueshoes.org/en/developer/php_cheat_sheet/

y también el manual:
http://www.php.net/manual/es/languag...comparison.php
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #6 (permalink)  
Antiguo 13/11/2010, 10:16
 
Fecha de Ingreso: agosto-2005
Ubicación: Valencia
Mensajes: 76
Antigüedad: 18 años, 7 meses
Puntos: 1
Respuesta: Cosa muy extraña....

OK perfecto, así es. Al hacer que evalúe 0 como una cadena de texto a comenzado a funcionar.

La solución es:
Código PHP:
if($organitzacio != '0')... 
Gracias!
__________________
Quien a buen árbol se arrima, buena sombra le cobija. :aplauso:

http://dbtrucos.com
  #7 (permalink)  
Antiguo 13/11/2010, 10:20
 
Fecha de Ingreso: agosto-2005
Ubicación: Valencia
Mensajes: 76
Antigüedad: 18 años, 7 meses
Puntos: 1
Respuesta: Cosa muy extraña....

He aquí el problema de los tipos. Porque si no recuerdo mal, PHP se encarga de convertir los tipos, ¿no?. Lo bueno de los lenguajes donde tú tienes que ocuparte de los tipos, evita este tipo de problemas...
__________________
Quien a buen árbol se arrima, buena sombra le cobija. :aplauso:

http://dbtrucos.com
  #8 (permalink)  
Antiguo 13/11/2010, 10:32
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 15 años, 11 meses
Puntos: 2534
Respuesta: Cosa muy extraña....

Cita:
Iniciado por el-eles Ver Mensaje
He aquí el problema de los tipos. Porque si no recuerdo mal, PHP se encarga de convertir los tipos, ¿no?. Lo bueno de los lenguajes donde tú tienes que ocuparte de los tipos, evita este tipo de problemas...
si, tienes razón... pero en primer instancia debes saber comparar tipos, una cosa es que php sea de tipado dinámico... y otra muy distinta son los operadores lógicos y de comparación!!

el problema aquí no es el tipo de las variables, si no los operadores que empleas...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:10.