多くの既存の PHP 4 のコードは変更無しで動作するはずですが、 以下の下位互換性がない変更点について注意する必要があります。
E_WARNING ではなく
      E_ERROR を発生します。不正な使用の例は、次のようなものです。
      $str = 'abc'; unset($str[0]);
     
    E_WARNING が発生します。あなたのコードで
      突然 E_WARNING が発生し始める可能性が
      あるため注意してください。
     
    PATH_TRANSLATED は、Apache2 SAPI では暗黙のうちに設定されません。
      この動作は、Apache により設定されていない場合に SCRIPT_FILENAME と同じ値に
      設定する PHP 4 と異なります。
      この変更は、» CGI/1.1 の規約に従うためのものです。
      詳細については、
      » bug #23610 を参照してください。
      また、マニュアルの
      $_SERVER['PATH_TRANSLATED'] についての記述も参照してください。
      この問題は、PHP のバージョン >= 4.3.2 でも影響を及ぼします。
     
    T_ML_CONSTANT は、
      Tokenizerエクステンションで
      定義されなくなりました。error_reporting にE_ALL
      を指定した場合、PHPは通知(notice)を生成します。
      T_ML_CONSTANTは、全く使用されていませんが、
      PHP 4 では定義されていました。PHP 4とPHP 5の両方において、
      // と /* */ は、共に T_COMMENT 定数と
      解釈されます。
      しかし、PHP5からPHPにより解釈されるようになった
      PHPDoc形式のコメント /** */  は、T_DOC_COMMENT
      と認識されます。
     
    __CLASS__, 
      __METHOD__, および
      __FUNCTION__にも適用されます。
      これらの値は、宣言時と同様に(ケース依存で)返されます。
     
    FALSE を返すようになりました。
     
    
例1 strrpos() と strripos() は、 needleとして文字列全体を使用する
<?php
var_dump(strrpos('ABCDEF','DEF')); //int(3)
var_dump(strrpos('ABCDEF','DAF')); //bool(false)
?>
例2 プロパティを持たないオブジェクトはもはや"空"とはみなされない
<?php
class test { }
$t = new test();
var_dump(empty($t)); // echo bool(false)
if ($t) {
    // 実行される
}
?>
以下の例はPHP 4では有効でしたが、PHP 5では致命的なエラーを 発生します。
例3 クラスは使用前に宣言する必要がある
<?php
$test = new fubar();
$test->barfu();
class fubar {
    function barfu() {
        echo 'fubar';
    }
}
?>