ユーザー定義の出力ハンドラから文字列でない値を返すことは、 推奨されなくなりました。 この推奨されない警告が表示されることを保証するため、 不正な戻り値を持つハンドラはバイパスされます。 つまり、ネストされた出力ハンドラが存在する場合、 次のハンドラは引き続き使われるということです。
ユーザー定義の出力ハンドラから(たとえば echo などを使って) 出力を行うことは、推奨されなくなりました。 この推奨されない警告は、 出力を生成するハンドラをバイパスして、 それが確実に表示されるようにします。 つまり、ネストされた出力ハンドラが存在する場合、 次のハンドラは引き続き使われるということです。 ユーザー定義の出力ハンドラが文字列でない値を返し、 かつ出力を生成する場合、出力を行ったことに関する警告が最初に発生します。
正規化されていない型名
(boolean),
(integer),
(double),
(binary) でキャストすることは、
推奨されなくなりました。
(bool), (int),
(float), (string)
をそれぞれ使ってください。
case文をコロンではなく、セミコロンで終了させることは、 推奨されなくなりました。
shell_exec() のエイリアスとして使われている バッククォート演算子 は、推奨されなくなりました。
__debugInfo()
から null を返すことは、推奨されなくなりました。
空の配列を返してください。
INI ディレクティブ report_memleaks は、 推奨されなくなりました。
同じ定数を再宣言することは、推奨されなくなりました。 これについては既に警告は発生しており、 (警告の種類が変わるだけで)それが続くことに注意してください。
既に E_WARNING が発生している、
クロージャのバインド時の以下の問題は、推奨されなくなりました:
マジックメソッド __sleep() と __wakeup() は、 soft-deprecated 扱いになりました。 代わりに、__serialize() と __unserialize() を使ってください。 PHP 7 との互換性が必要な場合は、両方を同時に使ってください。
配列のオフセットに null を指定したり、
array_key_exists() をコールする際に null を指定することは、
推奨されなくなりました。
代わりに、空文字列を使ってください。
数値でない文字列をインクリメントすることは、推奨されなくなりました。 str_increment() を代わりに使ってください。
CLI でない SAPI において、
クエリ文字列から $_SERVER['argc'] と
$_SERVER['argv'] の値を取得する機能は、
推奨されなくなりました。
安全な使い方を検証した上で register_argc_argv=0
を設定し、情報を取得する手段を $_GET や
$_SERVER['QUERY_STRING'] に切り替えてください。
curl_close() 関数は、推奨されなくなりました。 CurlHandle オブジェクトが、 自動でリソースを開放するためです。
curl_share_close() 関数は、推奨されなくなりました。 CurlShareHandle オブジェクトが、 自動でリソースを開放するためです。
定数 DATE_RFC7231 と
DateTimeInterface::RFC7231
は、推奨されなくなりました。
これらに関連付けられているタイムゾーンは無視され、
常に GMT を使っているためです。
finfo_close() 関数は、推奨されなくなりました。 finfo オブジェクトが、 自動でリソースを開放するためです。
finfo_buffer() 関数の $context
パラメータは、推奨されなくなりました。
このパラメータは無視されているためです。
imagedestroy() 関数は、推奨されなくなりました。 GdImage オブジェクトが、 自動でリソースを開放するためです。
MHASH_* 定数は、
推奨されなくなりました。
INI ディレクティブ intl.error_level は、 推奨されなくなりました。 エラーは手動でチェックするか、 INI ディレクティブ intl.use_exceptions を使って例外を有効にすべきです。
特定の Oracle Instant Client の呼び出しや定数は、 推奨されなくなりました。 影響を受ける呼び出しは以下の通りです:
GSLC_SSL_NO_UATHGSLC_SSL_ONEWAY_UATHGSLC_SSL_TWOWAY_UATHエイリアスとして定義されている mysqli_execute() 関数は、 推奨されなくなりました。 代わりに mysqli_stmt_execute() を使いましょう。
openssl_pkey_derive() の $key_length
パラメータは、推奨されなくなりました。
このパラメータは無視されているか、キーを切り捨てるかしており、
それらの挙動がセキュリティ上の脆弱性になりうるためです。
"uri:" DSN スキームは、推奨されなくなりました。
リモートURI から生じる、DSN に関するセキュリティ上の懸念があるためです。
PDO クラスのドライバ特有の定数は、推奨されなくなりました。 影響を受ける定数と、代替は以下のとおりです:
PDO::DBLIB_ATTR_CONNECTION_TIMEOUT => Pdo\Dblib::ATTR_CONNECTION_TIMEOUTPDO::DBLIB_ATTR_QUERY_TIMEOUT => Pdo\Dblib::ATTR_QUERY_TIMEOUTPDO::DBLIB_ATTR_STRINGIFY_UNIQUEIDENTIFIER => Pdo\Dblib::ATTR_STRINGIFY_UNIQUEIDENTIFIERPDO::DBLIB_ATTR_VERSION => Pdo\Dblib::ATTR_VERSIONPDO::DBLIB_ATTR_TDS_VERSION => Pdo\Dblib::ATTR_TDS_VERSIONPDO::DBLIB_ATTR_SKIP_EMPTY_ROWSETS => Pdo\Dblib::ATTR_SKIP_EMPTY_ROWSETSPDO::DBLIB_ATTR_DATETIME_CONVERT => Pdo\Dblib::ATTR_DATETIME_CONVERTPDO::FB_ATTR_DATE_FORMAT => Pdo\Firebird::ATTR_DATE_FORMATPDO::FB_ATTR_TIME_FORMAT => Pdo\Firebird::ATTR_TIME_FORMATPDO::FB_ATTR_TIMESTAMP_FORMAT => Pdo\Firebird::ATTR_TIMESTAMP_FORMATPDO::MYSQL_ATTR_USE_BUFFERED_QUERY => Pdo\Mysql::ATTR_USE_BUFFERED_QUERYPDO::MYSQL_ATTR_LOCAL_INFILE => Pdo\Mysql::ATTR_LOCAL_INFILEPDO::MYSQL_ATTR_LOCAL_INFILE_DIRECTORY => Pdo\Mysql::ATTR_LOCAL_INFILE_DIRECTORYPDO::MYSQL_ATTR_INIT_COMMAND => Pdo\Mysql::ATTR_INIT_COMMANDPDO::MYSQL_ATTR_MAX_BUFFER_SIZE => Pdo\Mysql::ATTR_MAX_BUFFER_SIZEPDO::MYSQL_ATTR_READ_DEFAULT_FILE => Pdo\Mysql::ATTR_READ_DEFAULT_FILEPDO::MYSQL_ATTR_READ_DEFAULT_GROUP => Pdo\Mysql::ATTR_READ_DEFAULT_GROUPPDO::MYSQL_ATTR_COMPRESS => Pdo\Mysql::ATTR_COMPRESSPDO::MYSQL_ATTR_DIRECT_QUERY => Pdo\Mysql::ATTR_DIRECT_QUERYPDO::MYSQL_ATTR_FOUND_ROWS => Pdo\Mysql::ATTR_FOUND_ROWSPDO::MYSQL_ATTR_IGNORE_SPACE => Pdo\Mysql::ATTR_IGNORE_SPACEPDO::MYSQL_ATTR_SSL_KEY => Pdo\Mysql::ATTR_SSL_KEYPDO::MYSQL_ATTR_SSL_CERT => Pdo\Mysql::ATTR_SSL_CERTPDO::MYSQL_ATTR_SSL_CA => Pdo\Mysql::ATTR_SSL_CAPDO::MYSQL_ATTR_SSL_CAPATH => Pdo\Mysql::ATTR_SSL_CAPATHPDO::MYSQL_ATTR_SSL_CIPHER => Pdo\Mysql::ATTR_SSL_CIPHERPDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => Pdo\Mysql::ATTR_SSL_VERIFY_SERVER_CERTPDO::MYSQL_ATTR_SERVER_PUBLIC_KEY => Pdo\Mysql::ATTR_SERVER_PUBLIC_KEYPDO::MYSQL_ATTR_MULTI_STATEMENTS => Pdo\Mysql::ATTR_MULTI_STATEMENTSPDO::ODBC_ATTR_USE_CURSOR_LIBRARY => Pdo\Odbc::ATTR_USE_CURSOR_LIBRARYPDO::ODBC_ATTR_ASSUME_UTF8 => Pdo\Odbc::ATTR_ASSUME_UTF8PDO::ODBC_SQL_USE_IF_NEEDED => Pdo\Odbc::SQL_USE_IF_NEEDEDPDO::ODBC_SQL_USE_DRIVER => Pdo\Odbc::SQL_USE_DRIVERPDO::ODBC_SQL_USE_ODBC => Pdo\Odbc::SQL_USE_ODBCPDO::PGSQL_ATTR_DISABLE_PREPARES => Pdo\Pgsql::ATTR_DISABLE_PREPARESPDO::SQLITE_ATTR_EXTENDED_RESULT_CODES => Pdo\Sqlite::ATTR_EXTENDED_RESULT_CODESPDO::SQLITE_ATTR_OPEN_FLAGS => Pdo\Sqlite::OPEN_FLAGSPDO::SQLITE_ATTR_READONLY_STATEMENT => Pdo\Sqlite::ATTR_READONLY_STATEMENTPDO::SQLITE_DETERMINISTIC => Pdo\Sqlite::DETERMINISTICPDO::SQLITE_OPEN_READONLY => Pdo\Sqlite::OPEN_READONLYPDO::SQLITE_OPEN_READWRITE => Pdo\Sqlite::OPEN_READWRITEPDO::SQLITE_OPEN_CREATE => Pdo\Sqlite::OPEN_CREATEPDO クラスのドライバ特有のメソッドは、推奨されなくなりました。 影響を受けるメソッドと、代替は以下のとおりです:
トランザクションの状態に関連する以下の定数は、推奨されなくなりました。 この機能は PDO で利用できなくなっているからです:
PDO::PGSQL_TRANSACTION_IDLEPDO::PGSQL_TRANSACTION_ACTIVEPDO::PGSQL_TRANSACTION_INTRANSPDO::PGSQL_TRANSACTION_INERRORPDO::PGSQL_TRANSACTION_UNKNOWN
リフレクション関連の様々な setAccessible() メソッドは、
推奨されなくなりました。
使っても効果がないためです。
存在しない定数に対して、 ReflectionClass::getConstant() をコールすることは、推奨されなくなりました。
デフォルト値が存在しないプロパティに対して、 ReflectionProperty::getDefaultValue() をコールすることは、推奨されなくなりました。
spl_autoload_call() を spl_autoload_unregister() のコールバック引数に渡すことで、 すべての autoload の登録を解除することは、推奨されなくなりました。 代わりに、spl_autoload_functions() の戻り値を反復処理し、 それぞれの値に対して spl_autoload_unregister() をコールする必要があります。
SplObjectStorage::contains(), SplObjectStorage::attach(), SplObjectStorage::detach() は、推奨されなくなりました。 SplObjectStorage::offsetExists(), SplObjectStorage::offsetSet(), SplObjectStorage::offsetUnset() をそれぞれ使ってください。
オブジェクトと一緒に ArrayObject と ArrayIterator を使うことは、 推奨されなくなりました。
エイリアスとして定義されている socket_set_timeout() 関数は、 推奨されなくなりました。 代わりに stream_set_timeout() を使いましょう。
最後にオープンしたディレクトリを使う目的で、
readdir(),
rewinddir(),
closedir() に null を渡すことは、
推奨されなくなりました。
最後にオープンしたディレクトリを明示的に指定してください。
chr() に、
区間 [0, 255] の範囲にない数値を指定することは、
推奨されなくなりました。
1バイトのデータは、この範囲でのみ保持できるからです。
シングルバイトでない文字列を ord() に渡すことは、 推奨されなくなりました。 こうすることは、バグであることを示唆しています。
ローカルで事前に定義済みの変数 $http_response_header は、推奨されなくなりました。代わりに、 http_get_last_response_headers() をコールすべきです。
xml_parser_free() 関数は、推奨されなくなりました。 XMLParser オブジェクトが、 自動でリソースを開放するためです。