PHP 5 Hosting Linux : consejos y precauciones sobre la compatibilidad hacia PHP 4

La nueva versión de PHP ha sido notablemente potenciada gracias al motor Zend Engine 2, además de numerosas y nuevas funciones implementadas.

Los desarrolladores de la plataforma  han tenido como consideración la necesidad de compatibilidad hacia las aplicaciones y los scripts creados para la gestión precedente, pero algunas diferencias en el motor hacen necesarias algunas modificaciones en el antiguo código y algunas precauciones en la escritura del nuevo. Directamente desde las páginas de soporte de php.net, remitimos los puntos salientes: todos los links se abren en una nueva ventana.

Cambios no compatibles (fuente completa, php.net)
• Hay algunas nuevas palabras clave reservadas.
• strrpos() y strripos() ahora usan la cadena entera como argumento de búsqueda.

•  El uso ilegal del offset de las cadenas causa E_ERROR en vez de E_WARNING. Un ejemplo de uso ilegal es: $str = 'abc'; unset($str[0]);.
• array_merge() ha sido cambiada para aceptar sólo array. Si se pasa una variable que no es un array, un E_WARNING es lanzado para cada parámetro. Preste atención , puesto que el código puede comenzar a emitir E_WARNING de repente.
• La variable server PATH_TRANSLATED ha sido modificada: ver también la descripción de $_SERVER['PATH_TRANSLATED'] en el manual.
• Un objeto sin propiedad no está considerado como “vacío”.


•  En algunos casos las clases deben ser declaradas antes del uso. Esto sucede sólo si se usa alguna de las nuevas características de PHP 5 (como la interfaz). En caso contrario el comportamiento es el del antiguo. 


 
• get_class(), get_parent_class() y get_class_methods() ahora devuelven el nombre de clases/métodos como están declarados (case-sensitive) el que puede llevar a problemas en los antiguos scripts que se basan en el comportamiento precedente (el nombre de clase/método era siempre devuelto en caracteres minúsculos). Una solución posible es la de buscar estas funciones en los scripts y usar strtolower(). Esta modificación a la sensibilidad de mayúsculas/minúsculas se aplica también a las constantes mágicas predefinidas __CLASS__, __METHOD__, y __FUNCTION__. Los valores son devueltos exactamente como son declarados (case-sensitive).
• ip2long() ahora devuelve FALSE cuando una dirección IP no válida se pasa como argumento a la función, y no como -1.
• Existen funciones definidas en un archivo incluido, estas pueden ser usadas en el archivo principal independientemente del hecho de que estén antes de return() o después. Si el archivo está incluido dos veces, PHP 5 emite un error fatal puesto que las funciones estaban ya declaradas. Se recomienda usar include_once() en vez de controlar si el archivo ha sido ya incluido y hacer un return condicionado en el interior del archivo incluido. 

Además:

- No se puede volver a asignar $this : el ejemplo que sigue funciona en PHP4 (muestra "OK"), mientras produce un "fatal error" en PHP5: 
 
 
- No se consienten los comentarios en el código con esta sintaxis 


 
- Constructors e reference, atención, el siguiente ejemplo funciona bajo PHP 4 mientras produce un aviso E_NOTICE en PHP5. En este caso el problema se resuelve eliminando &


 
En PHP5 están además disponibles nuevas funciones, por ejemplo en relación al tratamiento array:

  • array_combine() - Crea un array usando un array para las claves y otro para los valores.
  • array_diff_uassoc() - Calcula la diferencia entre array con la posibilidad de controlar los índices mediante una función de callback suministrada por el usuario.
  • array_udiff() - Calcula la diferencia entre un array usando una función callback para la comparación de los datos.
  • array_udiff_assoc() - Calcula la diferencia entre un array con la posibilidad de verificar los índices. Los valores son comparados usando una función de callback.
  • array_udiff_uassoc() - Calcula la diferencia entre array con la posibilidad de verificar los índices. Los valores son comparados usando una función callback. La verificación de los índices se hace usando una función callback.
  • array_walk_recursive() - Aplica una función de usuario de manera recursiva a cada elemento de un array.
  • array_uintersect_assoc() - Calcula la intersección de array con la posibilidad de verificar los índices. Los valores son comparados usando una función de callback.
  • array_uintersect_uassoc() - Calcula la intersección de un array con la posibilidad de verificar los índices. Tanto los valores que los índices son comparados usando una función de callback.
  • array_uintersect() - Calcula la intersección de un array. Los valores son comparados usando una función de callback.

Si utiliza aplicaciones de terceras partes, cms, portales, foros, libros de visitas, etc, asegurarse de que la aplicación sea compatible con PHP5 en el soporte de la aplicación o script en cuestión.