|
Aunque la mayoría de código PHP 4 existente debe correr sin modificaciones, es importante que preste atención a los siguientes cambios incompatibles con versiones anteriores:
Existen algunas palabras clave nuevas.
strrpos() y strripos() ahora usan la cadena entera como aguja.
El uso de índices de cadena inválidos generan errores de tipo E_ERROR en lugar de E_WARNING. Un ejemplo de uso inválido es: $cadena = 'abc'; unset($cadena[0]);.
Se modificó array_merge() para que acepte únicamente matrices. Si una variable de un tipo diferente a matriz es pasada, se genera un error de tipo E_WARNING para cada uno de esos parámetros. Tenga cuidado, ya que su código puede comenzar a emitir anuncios E_WARNING de la nada.
La variable de servidor PATH_TRANSLATED ya no es definida de forma implícita bajo la SAPI de Apache2, a diferencia del comportamiento de PHP 4, en donde se define con el mismo valor de la variable de servidor SCRIPT_FILENAME cuando no se define por Apache. Este cambio fue realizado para seguir la especificación CGI. Por favor refiérase al bug #23610 para más información, y asimismo vea la descripción de $_SERVER['PATH_TRANSLATED'] en el manual. Este problema afecta también a las versiones >= 4.3.2 de PHP.
La constante T_ML_COMMENT ya no es definida por la extensión Tokenizer. Si el valor de error_reporting es E_ALL, PHP generará una noticia. Aunque la constante T_ML_COMMENT nunca fue usada, estaba definida en PHP 4. Tanto en PHP 4 como en PHP 5 // y /* */ son resueltos como la constante T_COMMENT. Sin embargo, los comentarios estilo PHPDoc /** */, que son interpretados a partir de PHP 5, se reconocen como T_DOC_COMMENT.
$_SERVER debe poblarse con argc y argv si variables_order incluye "S". Si ha configurado su sistema específicamente para no crear $_SERVER, entonces por supuesto que no aparecerá. El cambio fue hecho para lograr que argc y argv siempre estuvieran disponibles en la versión CLI independientemente del parámetro variables_order. Es decir, ahora la versión CLI define siempre las variables globales $argc y $argv.
Un objeto sin propiedades ya no es considerado "vacío".
En algunos casos, las clases deben ser declaradas antes de ser usadas. Esto sólo ocurre si algunas de las nuevas características de PHP 5 son usadas. De otro modo el comportamiento antiguo se conserva.
get_class(), , get_parent_class() y get_class_methods() devuelven ahora el nombre de las clases/métodos como ellos fueron declarados (siguiendo las mayúsculas y minúsculas) lo cual puede llevar a problemas en scripts viejos que dependían en el comportamiento anterior (el nombre de la clase/método era devuelto en minúsculas siempre). Una posible solución es buscar las funciones mencionadas en todos sus scripts y usar strtolower().
Este cambio en la sensibilidad a minúsculas y mayúsculas se aplica también a las constantes predefinidas mágicamente __CLASS__, __METHOD__, y __FUNCTION__. Los valores son devueltos exactamente como son declarados (sensibles a mayúsculas y minúsculas).
ip2long() ahora devuelve FALSE cuando una dirección IP inválida es pasada como argumento a la función, y no -1.
Si hay funciones definidas en el archivo incluido, éstas pueden ser usadas en el archivo principal, sin importar que estén antes de una sentencia return() o después. Si el archivo es incluido dos veces, PHP 5 produce un error fatal ya que las funciones ya han sido declaradas, mientras que PHP 4 no se queja al respecto. Se recomienda usar include_once() en lugar de revisar si el archivo ya había sido incluido y retornar condicionalmente al interior del archivo incluido.
include_once() y require_once() primero normalizan la ruta del archivo incluido en Windows de modo que incluir A.php y a.php incluyen el archivo solo una vez.
Ejemplo B-1. strrpos() y strripos() ahora usan la cadena entera como aguja
|
Hosting by: hurra.com
Generated: 2007-01-26 18:01:09