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 {
} 
?>