下位互換性のない変更点
オブジェクトと配列の型変換における数値キーの扱い
配列からオブジェクトへのキャストやその逆のキャストにおける、数値キーの扱いが改善されました。
明示的なキャストだけではなく settype を使った場合も同様です。
数値キーの配列をオブジェクトにキャストしたときに、その要素にアクセスできるようになったのです。
また、オブジェクトに数値のキーが含まれる場合に、
配列にキャストしてもその要素にアクセスできるようになりました。
get_class に null
を渡せない
以前のバージョンでは、get_class に null
を渡すと、そのコンテキストの外側のクラスを返していました。
この機能は削除され、null
を渡すと E_WARNING
が発生するようになりました。
以前と同様の挙動を実現したい場合は、null
を渡すのではなく単にパラメータを省略するようにしましょう。
countable ではない型をカウントしたときの警告
countable ではない型に対して count (およびそのエイリアスである
sizeof) を使ったときに
E_WARNING
が発生するようになりました。
ext/hash がリソースからオブジェクトへ
長期にわたるリソースからオブジェクトへの移行作業の一環として、
Hash 拡張モジュールがリソースではなくオブジェクトを使うようになりました。
開発者側から見て特に変わるところはありませんが、もし
is_resource を使ったチェックを行っているのなら、
それを is_object に書き換える必要があります。
SSL/TLS のデフォルトの改善
デフォルト設定が以下のように変わりました。
-
tls://
が、TLSv1.0 や TLSv1.1 や TLSv1.2 のデフォルトになりました。
-
ssl://
は tls://
のエイリアスになりました。
-
STREAM_CRYPTO_METHOD_TLS_*
定数のデフォルトが、
TLSv1.0 だけではなく TLSv1.0 または TLSv1.1 + TLSv1.2 となりました。
gettype にクローズ済みのリソースを渡した際の戻り値
以前のバージョンでは、 gettype にクローズ済みのリソースを渡すと、"unknown type"
という文字列を返していました。
これからは、 "resource (closed)"
という文字列が返されます。
is_object と __PHP_Incomplete_Class
以前のバージョンでは、 __PHP_Incomplete_Class クラスに対して、
is_object を使うと false
が返されていました。
これからは true
が返されます。
定義されていない定数のエラーレベル変更
定義されていない定数への参照を行った場合、 E_WARNING
を生成するようになりました。
(今までは E_NOTICE
を生成していました。)
次のPHPメジャーバージョンでは、Error 例外を生成するように変更される予定です。
Windows サポート
現在、公式にサポートしている最低バージョンは Windows 7/Server 2008 R2です。
trait のプロパティの値チェック
trait のプロパティの値に対して互換性があるかどうかをチェックするときは、値のキャストを行わなくなりました。
object
をクラス名に使う
object
という名前は、PHP 7.0 では緩く予約されていました。
PHP 7.2 からは制約が強くなり、クラスや trait、インターフェイスの名前として使うことが禁止されます。
NetWare サポート
NetWareのサポートが削除されました。
array_unique 関数を
SORT_STRING
と使う場合
array_unique 関数を SORT_STRING
と使う場合、以前は配列をコピーし、重複した要素を削除
(配列を後にパックせずに) していましたが、このバージョンからは
新しい配列作られ、ユニークな要素を追加するようになりました。
これにより、以前のバージョンとは異なった数値のインデックスが生成されます。
bcmod の小数点に対する挙動変更
bcmod 関数が小数点切り捨てをしないようになりました。
これからは、挙動は %
演算子ではなく、 fmodに準拠します。
たとえば、 bcmod('4', '3.5')
はいままでの1
ではなく、 0.5
を返します。
ハッシュ関数と非暗号化ハッシュ
hash_hmac、 hash_hmac_file、
hash_pbkdf2、 および hash_init (
HASH_HMAC
) は非暗号化ハッシュを受け入れないように変更されました。
json_decode 関数のオプション
json_decode 関数のオプション、
JSON_OBJECT_AS_ARRAY
は、2番めのパラメータ (assoc) が null
の場合に使用されるようになりました。
JSON_OBJECT_AS_ARRAY
はこれまで無視されていました。
rand と mt_rand の出力
特定のシードで rand と
mt_rand で生成されたシーケンスは、64-bit マシンで動作しているPHP 7.1と値が異なる場合があります。
(モジュロバイアスのバグ修正が実装されました。).
sql.safe_mode
のini設定が削除されました。
外部から入力されるCookie
PHP 7.2.34 以降は、セキュリティ上の理由により、
外部から入力される Cookie の
名前 はurlデコードされなくなりました。