PHPのお勉強!

PHP TOP

下位互換性のない変更点

このセクションで明示的に述べられていなくても、 新しい関数クラス、インターフェイス、列挙型、 または定数は、 再宣言によるErrorがスローされる可能性があります。

PHP コア

exit() の動作の変更

exit() (およびdie()) 言語構造は、関数のように振る舞います。 これにより、callableとして渡すことができ、 strict_types 宣言の影響を受け、 任意の非整数値を文字列にキャストする代わりに、通常の型強制を行います。

そのため、exit() および die() に 無効な型を渡すと、一貫してTypeError が スローされるようになりました。

比較中の再帰

比較中に再帰が発生すると、 E_ERROR の致命的なエラーの代わりに、 Error 例外がスローされるようになりました。

readonly プロパティの間接的な変更

__clone() 内で readonly プロパティを間接的に変更することは、 もはや許可されなくなりました。例えば、$ref = &$this->readonly のようなコードです。 これは readonly の初期化時にはすでに禁止されており、 「クローン時の readonly の再初期化」の実装における見落としでした。

定数の型の変更

PHP_DEBUG および PHP_ZTS 定数の型が、 int から bool に変更されました。

一時ファイル名の長さ

アップロードされたファイルや tempnam() 関数で作成されるファイルの名前は、 以前より13バイト長くなりました。 総合的な長さは引き続きプラットフォーム依存です。

E_STRICT エラーレベルの削除

E_STRICT エラーレベルは、 PHPエンジン内で使用されなくなったため削除されました。 E_STRICT 定数は非推奨となりました。

型が追加された拡張クラスの定数

以下の拡張クラスは、定数に型が宣言されました:

リソースからオブジェクトへの移行

いくつかの リソース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() は、 mapint のみで構成されているかをチェックし、 そうでない場合 ValueError をスローするようになりました。

mb_http_input() は、 type が無効な場合、常に ValueError をスローするようになりました。

mb_http_output() は、 encoding にヌルバイトが含まれていないかをチェックし、 含まれている場合 ValueError をスローするようになりました。

ODBC

odbc_fetch_row() は、 row0 以下の場合、 false を返すようになりました。この場合、警告が発せられます。

PCNTL

pcntl_sigprocmask()pcntl_sigwaitinfo()、および pcntl_sigtimedwait() 関数は、次の場合エラーをスローするようになりました:

pcntl_sigprocmask() 関数は、 modeSIG_BLOCKSIG_UNBLOCKSIG_SETMASK のいずれでもない場合、 ValueError をスローするようになりました。

pcntl_sigtimedwait() 関数は、次の場合エラーをスローするようになりました:

  • seconds0 未満の場合、 ValueError
  • nanoseconds0 未満 または 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関数コールバックの呼び出しに失敗した場合、 警告の発生ではなく、例外がスローされるようになりました。