Incompatibilidades con versiones anteriores
Si bien la mayoría del código PHP 5 existente debería funcionar sin necesidad de hacer ningún cambio, debe prestarse atención a las siguientes incompatibilidades con versiones anteriores:
-
getrusage() devuelve
NULLcuando se pasan argumentos incompatibles a partir de PHP 5.2.1. -
ZipArchive::setCommentName()
devuelve
TRUEen caso de éxito a partir de PHP 5.2.1. -
ZipArchive::setCommentIndex()
devuelve
TRUEen caso de éxito a partir de PHP 5.2.1. - SplFileObject::getFilename() devuelve el nombre del fichero, no ruta/relativa/al/fichero, a partir de PHP 5.2.1.
- Ha cambiado la prioridad de la variable de entorno PHPRC en Win32 La variable de entorno PHPRC ahora tiene prioridad sobre la ruta de acceso almacenada en el registro de Windows.
- CLI SAPI ya no busca por los ficheros php.ini o php-cli.ini en el directorio de trabajo actual. En PHP 5.1.x fue agregada una característica no documentada que hizo que el interprete CLI chequeara de forma binaria el directorio de trabajo actual en busca de un fichero de configuración de PHP, esto puede conducir a un comportamiento impredecible si un fichero de configuración inesperado fuera leído. Esta funcionalidad se quitó en 5.2.0, y PHP ya no buscará en el directorio de trabajo actual por la presencia de los ficheros php.ini o php-cli.ini. Ver también la sección de línea de comandos del manual.
-
Se ha añadido una advertencia al realizar operaciones de módulo 0.
En versiones anteriores de PHP, realizar entero % 0 no emitía ningún mensaje
de advertencia, en su lugar solamente devolvía el valor inesperado
FALSE. A partir de PHP 5.2.0, esta operación emitirá unE_WARNING, así como en todos los casos donde se realize una división por cero.<?php
print 10 % 0;
/* Warning: Division by zero in filename on line n */
?> -
__toString() ha sido cambiado para poder ser llamado
donde sea aplicable.
El método mágico __toString() ahora será llamado en un
contexto de cadena, así de simple, en cualquier lugar donde un objeto sea
usado como una cadena.
La alternativa de devolver una cadena que contiene el identificador del
objeto fue quitada en PHP 5.2.0. Se convirtió en un problema debido a que
un identificador de objeto no puede ser considerado único. Este cambio
significará un daño en aplicaciones que confían en el identificador de
objeto como valor de retorno. Un intento de utilizar ese valor como una
cadena resultará ahora en un error fatal capturable.
Incluso con __toString(), los objetos no pueden ser usados como índices o claves de array. Podemos agregar soporte integrado hash para esto más adelante, pero a partir de PHP 5.2.x necesitará proporcionar su propio hashing o usar la nueva función SPL spl_object_hash(). No pueden ser lanzadas excepciones desde métodos __toString().
<?php
class foo {}
$foo = new foo;
print $foo;
/* Catchable fatal error: Object of class foo could
not be converted to string in filename on line n */
?><?php
class foo {
public function __toString() {
throw new Exception;
}
}
try {
print new foo;
/* Fatal error: Method foo::__toString() must
not throw an exception in filename on line n */
} catch(Exception $e) {}
?> -
Quitadas funciones de clase abstractas estáticas.
Debido a un descuido, PHP 5.0.x y 5.1.x permiten funciones abstractas
estáticas en las clases. A partir de PHP 5.2.x, sólo las interfaces pueden
tenerlas.
<?php
abstract class foo {
abstract static function bar();
/* Strict Standards: Static function foo::bar()
should not be abstract in filename on line n */
}
?> - La Extensión Oracle requiere al menos Oracle 10 en Windows.
-
Agregado soporte RFC2397 (flujos data:).
La introducción del esquema URL 'data' tiene el potencial de dar lugar a un
cambio de comportamiento bajo Windows. Si se está trabajando con un sistema
de ficheros NTFS y haciendo uso de meta flujos en la
aplicación, y si sólo se está utilizando un fichero con el nombre 'data:'
al que se accede sin ningún tipo de información de la ruta - esta ya no
funcionará más. La solución es utilizar el protocolo 'file:' cuando se
accede a él.
Ver también » RFC 2397
<?php
/* when allow_url_include is OFF (default) */
include "data:;base64,PD9waHAgcGhwaW5mbygpOz8+";
/* Warning: include(): URL file-access is disabled
in the server configuration in filename on line n */
?> -
Regresión en patrones glob()
En la versión 5.2.4 una corrección de seguridad provocó una regresión para
patrones de la forma "/foo/*/bar/*". Desde la versión 5.2.5 en lugar de
emitir una advertencia la función glob() devolverá
FALSEcuando se violan las restricciones openbase_dir.