|
下位互換性のない変更点
既存の 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 から int
flags に変わりました。
明示的に 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()
|