Aunque la mayoría del código existente en PHP 4 debe de correr sin modificaciones, se debe de prestar atención a los siguientes cambios incompatibles entre versiones:
E_ERROR en lugar de
     E_WARNING. Un ejemplo de uso ilegal es: 
     $str = 'abc'; unset($str[0]);.
    
   E_WARNING por
     cada parámetro. Debe tenerse cuidado para que un código no comience a emitir
     E_WARNING de la nada.
    
   PATH_TRANSLATED ya no se establece implicitamente en 
     Apache2 SAPI tal como sucedía en PHP 4, donde se establecía el mismo valor que contenía
     la variable de servidor SCRIPT_FILENAME cuando ésta no estaba completada
     por Apache. Este cambio fue realizada para cumplir con las » Especificación CGI/1.1. Por favor consulte » bug #23610 para más información,
     vea tambien la descripción de $_SERVER['PATH_TRANSLATED']
     en el manual. Este problema también afecta las versiones de PHP >= 4.3.2.
    
   T_ML_COMMENT ya no se define por la
     extensión Tokenizer. Si se configura
     error_reporting a E_ALL, PHP emitirá
     un aviso. Aunque T_ML_COMMENT no llegó a usarse,
     estaba definido en PHP 4. Tanto en PHP 4 y PHP 5
     // y /* */ se resuelven a la constante T_COMMENT.
     En cualquier caso los comentarios tipo PHPDoc /** */, introducidos en PHP
     5, son interpretados por PHP, y son reconocidos como T_DOC_COMMENT. 
    
   __CLASS__, 
     __METHOD__, y __FUNCTION__.
     Se devuelven los valores exactamente como se declararon (sensible a mayúsculas).
    
   FALSE cuando se proporciona una
     IP inválida como argumento a la función, y no
     -1.
    
   
Ejemplo #1 strrpos() y strripos() ahora usan todo el string como cadena de búsqueda
<?php
var_dump(strrpos('ABCDEF','DEF')); //int(3)
var_dump(strrpos('ABCDEF','DAF')); //bool(false)
?>
Ejemplo #2 Ya no se considera "vacío" un objeto sin propiedades
<?php
class test { }
$t = new test();
var_dump(empty($t)); // echo bool(false)
if ($t) {
    // Se ejecutará
}
?>
Ejemplo #3 En algunos casos, se deben definir las clases antes de usarlas
<?php
//Funciona sin errores:
$a = new a();
class a {
}
//lanza un error:
$a = new b();
interface c{
}
class b implements c {
} 
?>