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 NULL cuando se pasan argumentos incompatibles a partir de PHP 5.2.1.
  • ZipArchive::setCommentName() devuelve TRUE en caso de éxito a partir de PHP 5.2.1.
  • ZipArchive::setCommentIndex() devuelve TRUE en 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á un E_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.
    <?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 */
    ?>
    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 {
        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á FALSE cuando se violan las restricciones openbase_dir.