下位互換性のない変更点

number_format() は負のゼロを返さない

以前のバージョンでは、number_format() 関数が -0 を返せました。 これは IEEE 754 浮動小数点標準規格に沿ったまったく問題のない値ですが、 人間が読みやすい形式に数値をフォーマットするという意味では少し不自然でした。

<?php

var_dump
(number_format(-0.01)); // string(2) "-0" ではなく string(1) "0" となります

オブジェクトと配列の型変換における数値キーの扱い

配列からオブジェクトへのキャストやその逆のキャストにおける、数値キーの扱いが改善されました。 明示的なキャストだけではなく settype() を使った場合も同様です。

数値キーの配列をオブジェクトにキャストしたときに、その要素にアクセスできるようになったのです。

<?php

// 配列からオブジェクトへの変換
$arr = [=> 1];
$obj = (object)$arr;
var_dump(
    
$obj,
    
$obj->{'0'}, // アクセスできるようになりました
    
$obj->{0// アクセスできるようになりました
);

上の例の出力は以下となります。

object(stdClass)#1 (1) {
  ["0"]=>    // 数値キーではなく、文字列のキーになりました
  int(1)
}
int(1)
int(1)

また、オブジェクトに数値のキーが含まれる場合に、 配列にキャストしてもその要素にアクセスできるようになりました。

<?php

// オブジェクトから配列への変換
$obj = new class {
    public function 
__construct()
    {
        
$this->{0} = 1;
    }
};
$arr = (array)$obj;
var_dump(
    
$arr,
    
$arr[0], // アクセスできるようになりました
    
$arr['0'// アクセスできるようになりました
);

上の例の出力は以下となります。

array(1) {
  [0]=>    // 文字列のキーではなく、整数のキーになります
  int(1)
}
int(1)
int(1)

get_class()NULL を渡せない

以前のバージョンでは、get_class()NULL を渡すと、そのコンテキストの外側のクラスを返していました。 この機能は削除され、NULL を渡すと E_WARNING が発生するようになりました。 以前と同様の挙動を実現したい場合は、NULL を渡すのではなく単にパラメータを省略するようにしあしょう。

countabe ではない型をカウントしたときの警告

countable ではない型に対して count() (およびそのエイリアスである sizeof()) を使ったときに E_WARNING が発生するようになりました。

<?php

var_dump
(
    
count(1), // integer はカウントできません
    
count('abc'), // string はカウントできません
    
count(new stdclass), // Countable インターフェイスを実装していないオブジェクトはカウントできません
    
count([1,2]) // array はカウントできません
);

上の例の出力は以下となります。

Warning: count(): Parameter must be an array or an object that implements Countable in %s on line %d

Warning: count(): Parameter must be an array or an object that implements Countable in %s on line %d

Warning: count(): Parameter must be an array or an object that implements Countable in %s on line %d
int(1)
int(1)
int(1)
int(2)

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() return value on closed resources

Previously, using gettype() on a closed resource would return a string of "unknown type". Now, a string of "resource (closed)" will be returned.

is_object() and __PHP_Incomplete_Class

Previously, using is_object() on the __PHP_Incomplete_Class class would return FALSE. Now, TRUE will be returned.

Promote the error level of undefined constants

Unqualified references to undefined constants will now generate an E_WARNING (instead of an E_NOTICE). In the next major version of PHP, they will generate Error exceptions.

Windows support

The officially supported, minimum Windows versions are now Windows 7/Server 2008 R2.

Checks on default property values of traits

Compatibilitiy checks upon default trait property values will no longer perform casting.

object for class names

The object name was previously soft-reserved in PHP 7.0. This is now hard-reserved, prohibiting it from being used as a class, trait, or interface name.

NetWare support

Support for NetWare has now been removed.

bcmod() changes with floats

The bcmod() function no longer truncates fractional numbers to integers. As such, its behavior now follows fmod(), rather than the % operator. For example bcmod('4', '3.5') now returns 0.5 instead of 1.

Hashing functions and non-cryptographic hashes

The hash_hmac(), hash_hmac_file(), hash_pbkdf2(), and hash_init() (with HASH_HMAC) functions no longer accept non-cryptographic hashes.

json_decode() function options

The json_decode() function option, JSON_OBJECT_AS_ARRAY, is now used if the second parameter (assoc) is NULL. Previously, JSON_OBJECT_AS_ARRAY was always ignored.

rand() and mt_rand() output

Sequences generated by rand() and mt_rand() for a specific seed may differ from PHP 7.1 on 64-bit machines (due to the fixing of a modulo bias bug in the implementation).

Removal of sql.safe_mode ini setting

The sql.safe_mode ini setting has now been removed.

add a note add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top