推奨されなくなる機能
PHP コア
-
デフォルト値を持つ引数の後に、必須の引数が続く場合、デフォルト値は意味をなしません。 こうした書き方は PHP 8.0.0 から推奨されなくなります。 以下のようにしてデフォルト値を削除することで、機能を変更することなく解決できます:
<?php
function test($a = [], $b) {} // 変更前
function test($a, $b) {} // 変更後
?>このルールの唯一の例外は、
Type $param = null
と書かれた引数です。 null をデフォルトにすることは、型が暗黙のうちに nullable であることを示しています。 この書き方はまだ許可されていますが、以下のようにして 明示的に nullable 型を使うことを推奨します:<?php
function test(A $a = null, $b) {} // まだ許可されています
function test(?A $a, $b) {} // 推奨される書き方
?> -
exclude_disabled
を明示的にfalse
に指定して get_defined_functions() 関数を呼び出すことは推奨されなくなり、 結果として何も起きなくなりました。 get_defined_functions() 関数は無効な関数を返さなくなっています。
Enchant
-
enchant_broker_set_dict_path() と enchant_broker_get_dict_path() 関数は推奨されません。 これらの機能は libenchant < 1.5 や libenchant-2 では既に利用できないからです。
-
enchant_dict_add_to_personal() は推奨されません。 enchant_dict_add() を代わりに使って下さい。
-
enchant_dict_is_in_session() は推奨されません。 enchant_dict_is_added() を代わりに使って下さい。
-
enchant_broker_free() と enchant_broker_free_dict() は推奨されません。 代わりにオブジェクトを unset して下さい。
-
定数
ENCHANT_MYSPELL
とENCHANT_ISPELL
は推奨されません。
LibXML
libxml_disable_entity_loader() 関数は推奨されなくなりました。
libxml 2.9.0 がビルドに必須になったので、
外部エンティティの読み込みはデフォルトで無効になっていることが保証されています。
よって、(未だ脆弱な) LIBXML_NOENT
を使わない限り、
XXE 攻撃を防ぐためにこの関数を使う必要は既になくなっています。
LIBXML_NOENT
をまだ使っている場合は、
外部エンティティの読み込みを抑制するように、
libxml_set_external_entity_loader()
を使ってコードをリファクタリングすることを推奨します。
PGSQL / PDO PGSQL
-
定数
PGSQL_LIBPQ_VERSION_STR
の値は、PGSQL_LIBPQ_VERSION
と同じになりました。 よって、PGSQL_LIBPQ_VERSION_STR
は推奨されません。 -
pgsql 拡張モジュールの関数エイリアスは推奨されなくなりました。 代わりにどの関数を使うべきなのかは、以下の一覧を参照ください:
- pg_errormessage() → pg_last_error()
- pg_numrows() → pg_num_rows()
- pg_numfields() → pg_num_fields()
- pg_cmdtuples() → pg_affected_rows()
- pg_fieldname() → pg_field_name()
- pg_fieldsize() → pg_field_size()
- pg_fieldtype() → pg_field_type()
- pg_fieldnum() → pg_field_num()
- pg_result() → pg_fetch_result()
- pg_fieldprtlen() → pg_field_prtlen()
- pg_fieldisnull() → pg_field_is_null()
- pg_freeresult() → pg_free_result()
- pg_getlastoid() → pg_last_oid()
- pg_locreate() → pg_lo_create()
- pg_lounlink() → pg_lo_unlink()
- pg_loopen() → pg_lo_open()
- pg_loclose() → pg_lo_close()
- pg_loread() → pg_lo_read()
- pg_lowrite() → pg_lo_write()
- pg_loreadall() → pg_lo_read_all()
- pg_loimport() → pg_lo_import()
- pg_loexport() → pg_lo_export()
- pg_setclientencoding() → pg_set_client_encoding()
- pg_clientencoding() -> pg_client_encoding()
標準ライブラリ
Zip
-
空のファイルを ZipArchive として使うことは推奨されなくなりました。 Libzip 1.6.0 は空のファイルを正しいzipアーカイブとして受け入れなくなっています。 既に存在する回避策は、次のバージョンで削除される予定です。
-
Zip の手続き型の API は推奨されなくなりました。 ZipArchive クラスを代わりに使って下さい。 ZipArchive::statIndex() と for ループを以下のようにして使えば、 全てのエントリを処理できます:
<?php
// 手続き型のAPIを使ってループする
assert(is_resource($zip));
while ($entry = zip_read($zip)) {
echo zip_entry_name($entry);
}
// オブジェクト指向のAPIを使ってループする
assert($zip instanceof ZipArchive);
for ($i = 0; $entry = $zip->statIndex($i); $i++) {
echo $entry['name'];
}
?>
リフレクション
-
ReflectionFunction::isDisabled() は推奨されなくなりました。 無効な関数に対して ReflectionFunction を生成することはできなくなっているためです。 このメソッドは常に
false
を返すようになっています。 -
ReflectionParameter::getClass(), ReflectionParameter::isArray(), ReflectionParameter::isCallable() は推奨されません。 ReflectionParameter::getType() と ReflectionType API を代わりに使って下さい。
User Contributed Notes 1 note
If you try to get all methods / functions assigning an optional argument before a mandatory one, try this regex (single line)
<?php
function\s+[a-z][a-zA-Z0-9_]*\((?:\$[a-z][a-zA-Z0-9]*\s*,\s*)*
(?:\$[a-z][A-Za-z0-9_]*\s*=[^\$\)]+)+\$[a-z][a-zA-Z0-9_]*\)
?>
for
<?php
public function test($a, $b) {
$a = [];
$b = [$abc => $ss[],
];
}
private function too($c, $a = true, $b) {
}
protected function bar($a = []) {
}
public function foo($a, $b = true) {
}
public function fooBar32($a=true, $b = [], $c) {
}
private function oo_bAr($a = []) {
}
?>
it will match too() and fooBar32()
Have a nice migration! ;)