下位互換性のない変更点
このセクションで明示的に述べられていなくても、 新しい関数、 クラス、インターフェイス、列挙型、 または定数は、 再宣言によるErrorがスローされる可能性があります。
PHP コア
exit() の動作の変更
exit() (およびdie())
言語構造は、関数のように振る舞います。
これにより、callableとして渡すことができ、
strict_types
宣言の影響を受け、
任意の非整数値を文字列にキャストする代わりに、通常の型強制を行います。
そのため、exit() および die() に 無効な型を渡すと、一貫してTypeError が スローされるようになりました。
readonly プロパティの間接的な変更
__clone()
内で readonly プロパティを間接的に変更することは、
もはや許可されなくなりました。例えば、$ref = &$this->readonly
のようなコードです。
これは readonly の初期化時にはすでに禁止されており、
「クローン時の readonly の再初期化」の実装における見落としでした。
一時ファイル名の長さ
アップロードされたファイルや tempnam() 関数で作成されるファイルの名前は、 以前より13バイト長くなりました。 総合的な長さは引き続きプラットフォーム依存です。
リソースからオブジェクトへの移行
いくつかの リソース が object に移行されました。
is_resource() を使用した戻り値のチェックは、
特に指定がない限り、false
かどうかを確認するように置き換える必要があります。
DBA
DBA 関数は、
dba_connection
リソース の代わりに
Dba\Connection オブジェクトを受け取り、返すようになりました。
ODBC
ODBC 関数は、
odbc_result
リソース の代わりに
Odbc\Result オブジェクトを受け取り、返すようになりました。
ODBC 関数は、
odbc_connection
リソース の代わりに
Odbc\Connection オブジェクトを受け取り、返すようになりました。
SOAP
SoapClient::$httpurl プロパティは、
soap_url
リソース の代わりに
Soap\Url オブジェクトになりました。
is_resource() を使用したチェック
(例: is_resource($client->httpurl)
)は、
null
かどうかのチェック(例: $client->httpurl !== null
)に置き換える必要があります。
SoapClient::$sdl プロパティは、
soap_sdl
リソース の代わりに
Soap\Sdl オブジェクトになりました。
is_resource() を使用したチェック
(例: is_resource($client->sdl)
)は、
null
かどうかのチェック(例: $client->sdl !== null
)に置き換える必要があります。
新しい警告と例外
プログラミングエラー、つまり無効な値が引数として提供された場合にトリガーされる 新しい警告と例外が追加されました。
cURL
curl_multi_select() は、
timeout
パラメータが 0
未満または
PHP_INT_MAX
を超える場合、
ValueError をスローするようになりました。
GD
imagejpeg(), imagewebp(), imagepng(), imageavif()
は、無効な quality
が渡された場合、
ValueError をスローするようになりました。
imageavif() は、
無効な speed
パラメータ値が渡された場合、
ValueError をスローするようになりました。
imagescale() は、
width
または height
パラメータが
アンダーフロー/オーバーフローした場合、
ValueError をスローするようになりました。
imagescale() は、
無効な mode
パラメータ値が渡された場合、
ValueError をスローするようになりました。
imagefilter() は、
IMG_FILTER_SCATTER
フィルタで、
sub
または plus
パラメータが
アンダーフロー/オーバーフローした場合、
ValueError をスローするようになりました。
Gettext
bind_textdomain_codeset(), textdomain(), d()*gettext()
は、domain
が空文字列の場合、
ValueError をスローするようになりました。
Intl
resourcebundle_get()、 ResourceBundle::get()、および ResourceBundle オブジェクトでのオフセットアクセスは、 以下の場合に例外をスローするようになりました:
- 無効なオフセット型の場合、TypeError
- 空の string の場合、ValueError
- 整数インデックスが符号付き32ビット整数に収まらない場合、 ValueError
IntlDateFormatter::__construct() は、
locale
が無効な場合、
ValueError をスローするようになりました。
NumberFormatter::__construct() は、
locale
が無効な場合、
ValueError をスローするようになりました。
MBString
mb_encode_numericentity() および
mb_decode_numericentity() は、
map
が int のみで構成されているかをチェックし、
そうでない場合 ValueError をスローするようになりました。
mb_http_input() は、
type
が無効な場合、常に
ValueError をスローするようになりました。
mb_http_output() は、
encoding
にヌルバイトが含まれていないかをチェックし、
含まれている場合 ValueError をスローするようになりました。
ODBC
odbc_fetch_row() は、
row
が 0
以下の場合、
false
を返すようになりました。この場合、警告が発せられます。
PCNTL
pcntl_sigprocmask()、 pcntl_sigwaitinfo()、および pcntl_sigtimedwait() 関数は、次の場合エラーをスローするようになりました:
-
signals
配列が空の場合、 ValueError (pcntl_sigprocmask() でmode
がSIG_SETMASK
のときを除く) -
signals
配列の値が int でない場合、 TypeError -
signals
配列の値が有効なシグナル番号でない場合、 ValueError
pcntl_sigprocmask() 関数は、
mode
が SIG_BLOCK
、
SIG_UNBLOCK
、SIG_SETMASK
のいずれでもない場合、
ValueError をスローするようになりました。
pcntl_sigtimedwait() 関数は、次の場合エラーをスローするようになりました:
-
seconds
が0
未満の場合、 ValueError -
nanoseconds
が0
未満 または1e9
を超える場合、 ValueError -
seconds
およびnanoseconds
が両方とも0
の場合、ValueError
SimpleXML
simplexml_import_dom() に非XMLオブジェクトを渡すと、 ValueError の代わりに TypeError をスローするようになりました。
Standard
round() 関数は、 mode
の値を検証し、
無効なモードの場合、ValueError をスローするようになりました。
以前は、無効なモードは PHP_ROUND_HALF_UP
と解釈されていました。
str_getcsv() は、
separator
および enclosure
引数が
1バイトの長さでない場合、または escape
引数が
1バイトの長さでないか空文字列でない場合、
ValueError をスローするようになりました。
これは、fputcsv() および fgetcsv() の動作と
同じになるように合わせたものです。
php_uname() 関数は、
mode
が無効な場合、
ValueError をスローするようになりました。
unserialize() の
"allowed_classes"
オプションは、
クラス名の array でない場合、
TypeError および
ValueError をスローするようになりました。
XMLReader
無効な文字エンコーディングを XMLReader::open() または XMLReader::XML() に渡すと、 ValueError をスローするようになりました。
ヌルバイトを含む string を渡すと、以前は警告が発せられていましたが、 現在は ValueError をスローするようになりました。
XMLWriter
ヌルバイトを含む string を渡すと、以前は警告が発せられていましたが、 現在は ValueError をスローするようになりました。
XSL
XSLTProcessor::setParameter() は、 引数にヌルバイトが含まれる場合、ValueError をスローするようになりました。 これは、そもそも正しく動作していませんでした。
XSLTProcessor::importStyleSheet() に 非XMLオブジェクトを渡すと、ValueError の代わりに TypeError がスローされるようになりました。
評価中にPHP関数コールバックの呼び出しに失敗した場合、 警告の発生ではなく、例外がスローされるようになりました。