Nueva pregunta

Pregunta:

Fecha: 31-05-2017 10:39:55 (En Español)

[Aporte] PHP 7: Error: [] operator not supported for strings[Resuelta]

Hola a todos, en esta oportunidad quería compartirles un aporte / comentario con respecto a PHP 7 y la redeclaración de arrays en variables existentes del tipo string.

Como es sabido, PHP es un lenguaje que se caracteriza por un tipado de variables dinámico, en un momento una variable puede ser un string, en otro un integer, en otro un array, etc... y esto siempre ha sido objeto de críticas por parte de los "anti php" como también de halagos por los que disfrutan de la flexibilidad del lenguaje.

Con PHP 7 no es la excepción, seguimos gozando del tipado dinámico de variables, pero no podremos realizar una inicialización de un array sobre una variable del tipo string valiendonos de la apertura y cierre de corchetes (array's autonuméricos), ya que si lo hacemos obtendremos el error que le da título a este post [] operator not supported for strings, veamos lo dicho en código.

El siguiente código es perfectamente valido en PHP 5.6.x, pero ya no en PHP 7 (yo estoy trabajando con la versión 7.1.4, creo que en 7.0.x si funciona, por favor si alguien tiene un entorno 7.0.x que lo pruebe así nos desasnamos).
$datos = '';
$datos[] = 'Juan';
$datos[] = 'Luis';
$datos[] = 'Fernando';

echo '<pre>';
print_r($datos);
echo '</pre>';

Nota: el anterioro código falla en PHP 7 arrojando el error Error: [] operator not supported for strings in...

Este tema ha sido marcado como bug en el bug tracker de php.net en varios enlaces:
https://bugs.php.net/bug.php?id=53432
https://bugs.php.net/bug.php?id=72430
https://github.com/php/php-src/pull/463
En teoría (por lo que he entendido siguiendo todos los enlaces posibles) el problema es de documentación, y aparentemente este tipo de situación no será permitida. Si bien en el repositorio de php el bug #53432 figura como "fixed", ver en http://git.php.net/?p=php-src.git;a=commit;h=945a83103de8fbba66bdf643c4701263854c0056, el comentario del fix me dice que hay un trasfondo mucho más extenso: Fixed bug #53432: This change was discussed a while ago in the "negative string offsets" thread., vaya uno a saber cual es ese thread del "negative string offsets".... en fin, a los hechos me remito, no funciona :)


Mientras los desarrolladores de PHP siguén debatiendo, las posibles soluciones serán eliminar la declaración de la variable $datos como tipo string y/o redefinir la variable $datos como array(), veamoslo en código:

1) Eliminar la declaración de la variable $datos como tipo string:
$datos[] = 'Juan';
$datos[] = 'Luis';
$datos[] = 'Fernando';

echo '<pre>';
print_r($datos);
echo '</pre>';


2) Redefinir la variable $datos como array():
$datos = '';
$datos = array();
$datos[] = 'Juan';
$datos[] = 'Luis';
$datos[] = 'Fernando';

echo '<pre>';
print_r($datos);
echo '</pre>';


Si alguien encuentra/conoce el link de la documentación oficial donde se explique esto bienvenido sea, mientras tanto PHPCentral.com será muestro sitio de soporte ;)

Saludos a todos y buen código!
Etiquetas: Aporte - Array PHP - PHP7 Votos: 2 - Respuestas: 5 - Vistas: 14 Compartir en: Google Facebook Twitter LinkedIn Link
 

Respuestas:

  • Fecha: 31-05-2017 15:49:28 Fernando muchas gracias por ponernos al dia
    actualmente continuó utilizando la versión 5.x
    He creado una máquina virtual para correr XAMPP con PHP 7.0.18 y probar el código que has compartido.

    phpinfo.php

    testArray.php
    <?php
    $datos = '';
    $datos[] = 'Juan';
    $datos[] = 'Luis';
    $datos[] = 'Fernando';
    
    echo '<pre>';
    print_r($datos);
    echo '</pre>';

    Resultado:


    Espero que sea útil el test

    Que tengas un buen dia.

    Saludos
      Votos: 2 - Link respuesta
     
  • Fecha: 31-05-2017 17:10:59 Gracias Walter, si, como suponía esto aplica a la versión 7.1.x, en la 7.0.x se comporta como en la 5.6.x (sin problemas).

    Yo también estoy trabajando con la rama 5.6.x, pero para un nuevo proyecto me di a la tarea de migrar de la versión 5.6.x a 7.1.x, ya veremos con que más me encuentro..., digo, cambios hay muchos, pero por lo general están debidamente documentados, no como este caso...

    Saludos a todos y buen código!
      Votos: 1 - Link respuesta
     
  • Fecha: 02-06-2017 23:00:29 Hola
    He encontrado recientemente una manera de hacer test de codigo en distintas versiones de PHP online con PHP Sandbox.
    Dejo el link de los códigos de Fernando, de manera online que se pueden ejecutar:

    En PHP 7.1.0
    En PHP 7.0.14
    PHP 5.6.X

    Allí pueden modificar el codigo y testearlo en las distintas versiones de PHP.

    Saludos
      Votos: 2 - Link respuesta
     
  • Fecha: 11-06-2017 08:56:59 Genial, gracias a ambos por compartir la informacion!
    Saludos
      Votos: 0 - Link respuesta
     
  • Fecha: 05-11-2019 11:37:09 Gracias! Excelente aporte..
    Me funciono en php 7.2 :

    Despues de la declaracion de:

    $datos = '';

    Agregué:

    $datos = array();
      Votos: 1 - Link respuesta
     
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
 
frjcbbae garagebible.com