|  | 
 
  下位互換性のない変更点
   既存の PHP5 のコードのほとんどは変更なしで動作するはずですが、
   以下の下位互換性のない変更点については注意しましょう。
   
   
    
     セーフモードをサポートしなくなりました。セーフモードでの動作を前提とするアプリケーションは、
     セキュリティに関する調整が必要となります。
    
   
    
     マジッククォート が削除されました。
     この機能に依存するアプリケーションは、依存しないように修正しないとセキュリティの問題が発生します。
    
    
     get_magic_quotes_gpc と get_magic_quotes_runtime
     は常に falseを返すようになりました。set_magic_quotes_runtime を実行すると、
     マジッククォートを有効にしようとしてE_CORE_ERRORが発生します。
    
     ini 設定
     register_globals と
     register_long_arrays
     が削除されました。
    
   
    
     mbstring.script_encoding が削除されました。代わりに zend.script_encoding を使いましょう。
    
   
    
     呼び出し時の参照渡しをサポートしなくなりました。
    
   
    
     break
     と continue
     への引数として、変数は使えなくなりました。つまり、
     break 1 + foo() * $bar; などとは書けなくなったということです。
     静的な引数を使うのはもちろん可能で、break 2; などは使えます。
     この変更の副作用として、
     break 0; や continue 0; が使えなくなりました。
    
   
    
     htmlspecialchars、htmlentities
     および html_entity_decode 
     のデフォルトの文字セットが ISO-8859-1
     から UTF-8 に変わりました。出力文字セットを
     default_charset
     で変更しても、htmlspecialchars/htmlentities/html_entity_decode のデフォルトには影響が及ばないことに注意しましょう。
     この変更を反映させるには、
     htmlspecialchars/htmlentities
     をコールするときに、エンコーディングとして "" (空文字列) を指定しなければなりません。
     ただ、一般にこの方法はおすすめできません。
     この方法を使うと、出力文字セットが実行時の設定に依存してしまうからです。
     安全策として、htmlspecialchars、 
     htmlentities および html_entity_decode をコールするときには文字セットを毎回明示するようにしましょう。
    
   
    
     Date 拡張モジュールにおいて、TZ 環境変数によるタイムゾーンの設定をサポートしなくなりました。
     php.ini 設定 date.timezone あるいは date_default_timezone_set
     関数でタイムゾーンを指定しなければなりません。
     デフォルトのタイムゾーンが設定されていない場合に推測することがなくなり、
     未設定の場合は常に "UTC" とみなして E_WARNINGを発生させるようになりました。
    
     $a が文字列の場合に非数値のオフセット (たとえば $a['foo'])
     を指定したときの isset の返り値は false、
     そして empty の返り値は true となりました。
     そして同時に E_WARNINGが発生します。オフセットに double や bool そして null
     を指定した場合はE_NOTICEが発生します。数値とみなせる文字列を渡した場合
     ($a['2'] など) の挙動はこれまでと変わりません。
     '12.3' や '5 foobar' のようなオフセットは非数値とみなされてE_WARNINGが発生しますが、過去との互換性のためにそれぞれ 12 および 5 に変換されることに注意しましょう。
    
    
     次のようなコードの返す値が変わります。
    
    
     $str='abc';var_dump(isset($str['x'])); // PHP 5.4 以降では false、5.3 以前のバージョンでは true
    
     配列を文字列に変換しようとすると E_NOTICEが発生するようになりました。
     キャストの結果は "Array" で、以前と変わりません。
    
     null、falseあるいは空文字列にプロパティを追加してオブジェクトに変換しようとすると、
     これまでのようなE_STRICTエラーではなく warning が発生するようになりました。
    
     スーパーグローバルをパラメータ名として使うと fatal error となります。つまり
     function foo($_GET, $_POST) {} などのコードは使えなくなります。
    
   
    
     ハッシュアルゴリズム Salsa10 および Salsa20 が削除されました。
    
   
    
     Tiger ハッシュアルゴリズムは、ビッグエンディアンのバイト順を使用するようになりました。
     この例に従って、
     PHP 5.3 および 5.4 の両方と互換性のあるコードを記述してください。
    
   
    
     array_combine のパラメータとして空の配列を二つ指定したときの返り値が
     falseではなく array() となりました。
    
     htmlentities は、アジアの文字に対して使ったときに
     E_STRICTを発行するようになりました。この場合の
     htmlentities の挙動が htmlspecialchars
     (こちらは以前からそうなっていた) と同じになりました。
    
     ob_start の三番目のパラメータが
     bool eraseから intflagsに変わりました。
     明示的にeraseにfalseを設定しているコードは、PHP 5.4 では期待通りに動きません。
     この例 に従って、
     PHP 5.3 と 5.4 のどちらでも動くコードを書きましょう。
    
     stream_select 関数は、
     read,write,except配列のキーを保存するようになりました。 
   次に示すキーワードは予約語となり、関数名やクラス名などの識別子の名前として使えなくなりました。
   
   次の関数は PHP から削除されました。
   
   
    
     define_syslog_variables
    
   
    
     import_request_variables
    
   
    
     session_is_registered, session_register
     および session_unregister
    
   
    
     エイリアス
     mysqli_bind_param, mysqli_bind_result,
     mysqli_client_encoding, mysqli_fetch,
     mysqli_param_count, mysqli_get_metadata,
     mysqli_send_long_data, mysqli::client_encoding() および mysqli_stmt::stmt()
    
    |