Although most existing PHP 4 code should work without changes, you should pay attention to the following backward incompatible changes:
E_ERROR instead
      of E_WARNING. An example illegal use is: 
      $str = 'abc'; unset($str[0]);.
     
    E_WARNING will be
      thrown for every such parameter. Be careful because your code may start
      emitting E_WARNING out of the blue.
     
    PATH_TRANSLATED server variable is no longer set implicitly under
      Apache2 SAPI in contrast to the situation in PHP 4, where it is set to
      the same value as the SCRIPT_FILENAME server variable when it is not
      populated by Apache. This change was made to comply with the » CGI/1.1 specification. Please refer to » bug #23610 for further information,
      and see also the $_SERVER['PATH_TRANSLATED']
      description in the manual. This issue 
      also affects PHP versions >= 4.3.2.
     
    T_ML_COMMENT constant is no longer defined by
      the Tokenizer extension. If
      error_reporting is set to E_ALL, PHP will
      generate a notice. Although the T_ML_COMMENT was
      never used at all, it was defined in PHP 4. In both PHP 4 and PHP 5
      // and /* */ are resolved as the T_COMMENT
      constant. However the PHPDoc style comments /** */, which starting PHP
      5 are parsed by PHP, are recognized as T_DOC_COMMENT. 
     
    __CLASS__, 
      __METHOD__, and __FUNCTION__.
      The values are returned exactly as they're declared (case-sensitive).
     
    FALSE when an invalid IP
      address is passed as argument to the function, and no longer
      -1.
     
    
Example #1 strrpos() and strripos() now use the entire string as a needle
<?php
var_dump(strrpos('ABCDEF','DEF')); //int(3)
var_dump(strrpos('ABCDEF','DAF')); //bool(false)
?>
Example #2 An object with no properties is no longer considered "empty"
<?php
class test { }
$t = new test();
var_dump(empty($t)); // echo bool(false)
if ($t) {
    // Will be executed
}
?>
Example #3 In some cases classes must be declared before used
<?php
//works with no errors:
$a = new a();
class a {
}
//throws an error:
$a = new b();
interface c{
}
class b implements c {
} 
?>