Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Error en in_array()

Estas en el tema de Error en in_array() en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola a todos, Tengo un código que desde ayer me da un error y no se como resolverlo. El error que me da es en ...
  #1 (permalink)  
Antiguo 28/10/2008, 03:21
Avatar de SUSMO  
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 188
Antigüedad: 16 años
Puntos: 0
Error en in_array()

Hola a todos,

Tengo un código que desde ayer me da un error y no se como resolverlo.
El error que me da es en la función de php in_array: "in_array() [function.in-array]: Wrong datatype for second argument"
El código es el siguiente:

Código PHP:

$WIDGET_aDeclObjects 
= array();

class 
Widget
{
    .....
    function 
getDeclarationJSCode() {
        
    global 
$WIDGET_aDeclObjects;

    
$sClsName get_class($this);
    if (! 
in_array($sClsName$WIDGET_aDeclObjects)) {
              ......

        }
     .....
     }
     ......

Se que el problema está en la variable $WIDGET_aDeclObjects ya que si miro que valor tiene dentro de la función me devuelve null y no entiendo el motivo ya que la he declarado como global. Si en lugar de crear el array vacío lo creo con un valor el error sigue siendo el mismo y si hago la llamada a la variable con $GLOBALS['WIDGET_aDeclObjects'] sigue haciendo lo mismo.

El caso es que llevo meses utilizando esta clase y aunque parezca raro hasta ayer no me apareció este error.

¿Alguien sabe el motivo?

Por cierto, estoy trabajando con PHP5.

Saludos,
__________________
Perdida en el mundo del conocimiento
  #2 (permalink)  
Antiguo 28/10/2008, 05:00
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 18 años, 7 meses
Puntos: 19
Respuesta: Error en in_array()

Seguramente, en algún sitio modificas el valor de esa variable.

Podrías hacer una pequeña prueba que incluya esa clase y llamar a ese método a ver qué valor tiene $WIDGET_aDeclObjects.

Un saludo
  #3 (permalink)  
Antiguo 28/10/2008, 05:08
Avatar de SUSMO  
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 188
Antigüedad: 16 años
Puntos: 0
Respuesta: Error en in_array()

Hola jerkan,

De hecho en el único sitio donde modifico esta variable es en la clase que he puesto y sólo en la función indicada una vez entra en el if que he comentado: if (! in_array($sClsName, $WIDGET_aDeclObjects))
__________________
Perdida en el mundo del conocimiento
  #4 (permalink)  
Antiguo 28/10/2008, 08:33
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Error en in_array()

Mmmm muy raro, si bien tu código es correcto y no deberías tener ningún problema, verifica si han hecho algún cambio en la versión de PHP y si desactivaron movieron algo.

Saludos.
  #5 (permalink)  
Antiguo 28/10/2008, 08:52
Avatar de SUSMO  
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 188
Antigüedad: 16 años
Puntos: 0
Respuesta: Error en in_array()

Si que es raro si :( sobretodo pq estoy trabajando en local, no he modificado nada de configuración, no he modificado en ningún momento esta clase y antes de ayer me iva y hoy no.

El caso es que puedo solucionarlo pasando la variable como atributo de la clase pero me fastidia mucho que me pasen estos "expedientes X"
__________________
Perdida en el mundo del conocimiento
  #6 (permalink)  
Antiguo 28/10/2008, 08:59
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Error en in_array()

Si estas trabajando en local prueba reiniciar tu servidor web, aunque no tendria porque fallarte ya que no veo con el código que expones que estes haciendo nada incorrecto.

Saludos.
  #7 (permalink)  
Antiguo 28/10/2008, 09:15
Avatar de SUSMO  
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 188
Antigüedad: 16 años
Puntos: 0
Respuesta: Error en in_array()

He provado reiniciar el servidor de apache per no eso tampoco ha funcionado.

Lo solucionaré poniendo la variable como atributo de clase y dejando esta situación como otro misterio sin resolver :(

Muchas gracias por tu ayuda GatorV
__________________
Perdida en el mundo del conocimiento
  #8 (permalink)  
Antiguo 28/10/2008, 12:02
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Respuesta: Error en in_array()

Supongo que el código que has puesto será simplificando todo. ¿Has probado ese mismo código simplificado? creando un objeto después y accediendo a la clase... ¿sigue fallando?
  #9 (permalink)  
Antiguo 29/10/2008, 05:00
Avatar de SUSMO  
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 188
Antigüedad: 16 años
Puntos: 0
Respuesta: Error en in_array()

Hola Keysher,

El código que he puesto está muy simplificado, solamente puse el "trozo" donde fallaba y donde intervenia la variable que me daba error.

El tema está en que el error radica dentro de la función getDeclarationJSCode() donde la variable $WIDGET_aDeclObjects es llamada como global y fuera de la clase inicializada como array. Según la documentación ésto no deberia causar el menor problema y de hecho he estado meses utilizandolo y no me lo ha dado hasta el otro día que de golpe y porrazo sin modificar nada de esta clase, de la variable o el servidor me dio el error ya que dentro de la función la variable era nula después de declararla global.

Algo raro tiene que pasar con esta variable en concreto pero he revisado todos los archivos utilizados en el proyecto y sólo se utiliza en ésta clase y se modifica en esa función así que no se el motivo del fallo.

Podría simplificar el código tal y como dices para debugar más a fondo ya que otras variables utilizadas de la misma manera y en la misma clase funcionan (raro pero cierto) pero dado que el tiempo aprevia y el hecho de simplificar el código me quita mucho tiempo he decidido optar por la solución de poner esta variable como atributo de clase y me funciona a la perfección.

Saludos.
__________________
Perdida en el mundo del conocimiento
  #10 (permalink)  
Antiguo 29/10/2008, 05:09
Avatar de SUSMO  
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 188
Antigüedad: 16 años
Puntos: 0
Respuesta: Error en in_array()

Ups, después de escribir el post he vuelto ha hacer una pequeña comprovación y me he equivocado, ninguna de las variables de esa clase llamadas como globales van bien, todas son nulas. Bueno, resulta que el problema no está en una variable concreta sino en todas.
__________________
Perdida en el mundo del conocimiento
  #11 (permalink)  
Antiguo 29/10/2008, 05:32
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Respuesta: Error en in_array()

Umm, lo de simplificar me refería a poner exactamente lo mismo que has puesto en el primer post (Sin los puntos esos entre medias, claro está). Para ver si funciona o no. Es una prueba más limpía para comprobar si realmente está fallando algo ahí o se debe a algo externo.

Yo he probado ese mismo código y me funcionaba a la perfección (Como es lógico).

Con el último mensaje entramos en un nuevo escenario… No funciona ninguna variable global dentro de la clase… ¿sólo en esa función? ¿en todas? ¿pasa con más clases? ¿pasa también en funciones fuera de clases? ¿es el mismo comportamiento si haces global $variable o usando el array $GLOBALS?

Me parece raro, puede que sea algo de configuración de PHP (pero ignoro si hay algún modo de “capar” las variables globales….)
  #12 (permalink)  
Antiguo 29/10/2008, 07:18
Avatar de SUSMO  
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 188
Antigüedad: 16 años
Puntos: 0
Respuesta: Error en in_array()

Hola Keyser,

El problema con las variables globales sólo me ocurre en esta clase, en todas sus funciones y me hace lo mismo utilizando $GLOBALS. Tengo otras clases que utilizo globales y en esas si me funciona.
Lo que no he probado es si va bien en funciones fuera de clases.

Lo que me comentas de la configuración ya lo estuve mirando y lo único que encontré respecto a eso es el register_globals que lógicamente está en ON sino no iría en las otras clases, aunque de todas formas lo verifiqué.
__________________
Perdida en el mundo del conocimiento
  #13 (permalink)  
Antiguo 29/10/2008, 07:29
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Respuesta: Error en in_array()

Es que es realmente extraño que funcione en unos sitios sí y en otros no, por eso te aconsejaba simplicarlo todo a la misma expresión.

Aplicando la lógica tiene que haber "algo" en el script que haga que en ese determinado punto no funcionen las globales....

¿Pasa con todas las variables globales? ¿pasa en más sitios a partir de ese momento?

No sé, yo lo que haría sería ir reduciendo código hasta ver el punto en el que deja de pasar y a partir de ahí analizar el origen del error. O incluso probar en otro servidor, para ver si es problema del mismo.
  #14 (permalink)  
Antiguo 29/10/2008, 07:39
Avatar de SUSMO  
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 188
Antigüedad: 16 años
Puntos: 0
Respuesta: Error en in_array()

Si que es extraño si.

Seguiré tu consejo y cuando tenga tiempo me pondré a simplificar código y a depurar más exhaustivamente paso a paso el script a ver si encuentro el punto en el que falla y cuando lo encuentre lo postearé.

Gracias!!
__________________
Perdida en el mundo del conocimiento
  #15 (permalink)  
Antiguo 29/10/2008, 08:51
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Error en in_array()

Mmm si register_globals esta en ON, es probable que de algún lado estes re-escribiendo la variable, recuerda que el comportamiento de register_globals no es aconsejado y puede que ahí vaya tu problema, que exista alguna cookie o una variable de sesión llamada igual y por eso esta re-escribiendo el valor.

Saludos.
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 02:58.