2010-09-29 21 views
27

En uno de mis guiones, trato de hacer lo siguienteNo se puede utilizar [] para leer

$data[] = self::get($row['sr_id']); // <-- line 55 

Sin embargo, PHP no me permite hacer esto, darme esta error

Fatal error: Cannot use [] for reading in /file.php on line 55

La función self::get devuelve un bool o un objeto.

Edit: La función get crea un nuevo objeto que nuevamente carga datos desde una base de datos mysql.

+2

Compruebe qué $ fila contiene – Eiko

+1

'print_r ($ row)' –

+0

¿Puede mostrar el código circundante/el método get? – halfdan

Respuesta

15

versiones antiguas de PHP aceptadas $var[] en expresiones, permitió leer el contenido $var independientemente de la sintaxis. PHP 5.1 lo hizo ilegal. Pero a veces el error se dispara fuera del contexto intentado.
Así que mi conjetura (de nuevo: mostrar más código) es que la línea anterior contiene una expresión inacabada, a la que se une el $data[].

En el caso del atributo de objeto, puede ajustar su var de $ data en { }, pero ese no parece ser el problema en su caso. (De lo contrario, hay algo en la línea 54 que no se mostró). El lado derecho no puede desencadenar el error de manera razonable. Incluso la matriz que accede a [] un entero u objeto no desencadenaría ese error fatal.

Así que si nada ayuda, simplemente use array_push(). Trabaja alrededor de PHP.

+0

Gracias, la función 'array_push()' hizo el truco, ahora funciona. :) – eriktm

+0

Podría ser, o tal vez la matriz no estaba definida o de un tipo diferente, lo que puede causar este error fatal. (Vea abajo). – lucian303

0

intento:

$data = Array(); 
$data[] = self::get($row['sr_id']); // <-- line 55 
+0

No inicializar matrices no causará un error fatal. –

+0

está bien, pero si $ data era anteriormente un objeto o var, puede – sathia

+0

Esto no cambia el error – eriktm

28

La solución en mi caso fue la siguiente:

  • línea malo:

$this->$ExtraTag[] = $fullscript;

  • buena línea:

$this->{$ExtraTag}[] = $fullscript;

o

$this->ExtraTag[] = $fullscript;

+0

Dulce. $ this -> {$ ExtraTag} [] = $ fullscript funcionó para mí! – FateNuller

+1

No me sorprende que la primera línea "incorrecta" no funcione y la última línea lo haga: la línea "incorrecta" es en realidad sintaxis inválida, y la última línea es la sintaxis deseada. El ejemplo del medio es una solución fea para convertir el primer ejemplo en el tercero. Recomendaría en contra de eso: es menos claro, menos conciso y menos eficiente (porque PHP no tiene un precompilador para optimizarlo al tercer ejemplo). – Byson

0

El error que me dieron fue:

Fatal error: Cannot use [] for reading in /pathtosite/drupal/sites/all/themes/zenui/templates/page.tpl.php on line 33

En algún momento el problema es cuando se incluye una línea como esta:

$page['sidebar_first'][] 

Esto puede ocurrir si están copiando un nombre de variable y se olvidó de comentar la línea.

Hubo dos problemas:

1. Missing punto y coma

2. variable $ [] debe establecer una variable

Después de la fijación de estos dos problemas mi código lee:

$page['sidebar_first'][] = $value; 

No se olvide de comentar la línea no está usar para ayudar con el proceso de depuración

¡Espero que esto ayude a otros programadores como yo!

0

tuve el mismo problema con mi guión, la siguiente línea lanzó el mismo error:

$array[]=$value 

simplemente lo reemplazó por

$array[count($array)-1]=$value 

y ha funcionado perfectamente.

0

Otro posible problema podría ser un doble accidental ==. Por ejemplo, accidentalmente haciendo $myArray[] == $myNewValue; podría causar este error (porque está tratando de leer un valor con el == en lugar de decirle a PHP que asigne un nuevo índice de matriz).

Cuestiones relacionadas