PHP 8.4.x で推åĨ¨ã•れãĒくãĒる抟čƒŊ

PHP ã‚ŗã‚ĸ

暗éģ™įš„ãĒ nullable ãƒ‘ãƒŠãƒĄãƒŧã‚ŋ

ãƒ‘ãƒŠãƒĄãƒŧã‚ŋぎデフりãƒĢト値が null ぎ場合、 そぎ型は暗éģ™įš„ãĢ null を受けå…ĨれるようãĢæ‹Ąåŧĩされぞす。

æŦĄãŽã‚ŗãƒŧドは:

<?php
function foo(T1 $a = null) {}
こぎようãĢ:
<?php
function foo(T1|null $a = null) {}
ぞたはこぎようãĢäŋŽæ­Ŗã™ã‚‹åŋ…čĻãŒã‚ã‚Šãžã™ã€‚
<?php
function foo(?T1 $a = null) {}

しかし、そぎようãĒãƒ‘ãƒŠãƒĄãƒŧã‚ŋåŽŖč¨€ãŽåžŒãĢåŋ…é ˆãƒ‘ãƒŠãƒĄãƒŧã‚ŋがįļšãå ´åˆ:

<?php
function foo(T1 $a, T2 $b = null, T3 $c) {}
こぎようãĢ:
<?php
function foo(T1 $a, T2|null $b, T3 $c) {}
ぞたはこぎようãĢäŋŽæ­Ŗã™ã‚‹åŋ…čĻãŒã‚ã‚Šãžã™ã€‚
<?php
function foo(T1 $a, ?T2 $b, T3 $c) {}
ãĒぜãĒら、åŋ…é ˆãƒ‘ãƒŠãƒĄãƒŧã‚ŋぎ前ãĢäģģæ„ãƒ‘ãƒŠãƒĄãƒŧã‚ŋをįŊŽãã“とは非推åĨ¨ã ã‹ã‚‰ã§ã™ã€‚

ã‚ŧãƒ­ã‚’č˛ ãŽæ•°ã§ãšãäš—

ã‚ã‚‹æ•°ãŽč˛ ãŽãšãäš—ã¯ã€ ããŽæ•°ãŽæ­ŖãŽãšãäš—ãŽé€†æ•°ã¨åŒį­‰ã§ã™ã€‚ 䞋えば、10-2 は 1 / 102 ã¨åŒį­‰ã§ã™ã€‚ つぞり、0ãŽč˛ ãŽãšãäš—ã¯ 0 ã§å‰˛ã‚‹ã“ã¨ã‚’æ„å‘ŗã—ãžã™ã€‚äž‹ãˆã°ã€ 0-2 は 1 / 02、ぞたは 1 / 0 とãĒりぞす。äģĨ上より、こぎ動äŊœã¯éžæŽ¨åĨ¨ã¨ã•れぞした。

これはずき䚗æŧ”įޗ子 ** と pow() é–ĸ数ãĢåŊąéŸŋしぞす。

IEEE 754 ぎã‚ģãƒžãƒŗãƒ†ã‚Ŗã‚¯ã‚šãŒåŋ…čρãĒ場合は、新しい fpow() é–ĸ数をäŊŋį”¨ã—ãĻください。

クナ゚名をã‚ĸãƒŗãƒ€ãƒŧã‚šã‚ŗã‚ĸ _ とする

クナ゚名を _ ã¨ã™ã‚‹ã“ã¨ã¯ã€įžåœ¨éžæŽ¨åĨ¨ã¨ãĒãŖãĻいぞす:

<?php
class _ {}

æŗ¨æ„:

クナ゚名がã‚ĸãƒŗãƒ€ãƒŧã‚šã‚ŗã‚ĸで始ぞるぎは、 非推åĨ¨ã§ã¯ã‚りぞせん:

<?php
class _MyClass {}

trigger_error() で E_USER_ERROR をäŊŋᔍ

trigger_error() で error_level としãĻ E_USER_ERROR を指厚するぎは非推åĨ¨ã¨ãĒりぞした。

そぎようãĒ場合、䞋外を゚ロãƒŧするか、 exit() をå‘ŧãŗå‡ēすようãĢäŋŽæ­Ŗã™ãšãã§ã™ã€‚

E_STRICT 厚数

E_STRICT エナãƒŧãƒŦベãƒĢが削除されたため、 こぎ厚数は非推åĨ¨ã¨ãĒりぞした。

cURL

CURLOPT_BINARYTRANSFER 厚数は非推åĨ¨ã¨ãĒりぞした。

Date

DatePeriod::__construct(string $isostr, int $options = 0) ぎ ã‚ˇã‚°ãƒãƒãƒŖã¯éžæŽ¨åĨ¨ã¨ãĒりぞした。 äģŖã‚ã‚ŠãĢ DatePeriod::createFromISO8601String() をäŊŋį”¨ã—ãĻください。

SUNFUNCS_RET_TIMESTAMP、 SUNFUNCS_RET_STRING、 ãŠã‚ˆãŗ SUNFUNCS_RET_DOUBLE 厚数は非推åĨ¨ã¨ãĒりぞした。 これは PHP 8.1.0 で date_sunset() と date_sunrise() é–ĸ数が非推åĨ¨ã¨ãĒãŖãŸã“ã¨ãĢäŧ´ã†ã‚‚ぎです。

DBA

dba_key_split() ãĢ null ぞたは false ã‚’æ¸Ąã™ã“ã¨ã¯ 非推åĨ¨ã¨ãĒりぞした。 これらぎ場合、常ãĢ false をčŋ”しãĻいぞした。

DOM

DOM_PHP_ERR 厚数は非推åĨ¨ã¨ãĒりぞした。

äģĨä¸‹ãŽãƒ—ãƒ­ãƒ‘ãƒ†ã‚Ŗã¯æ­ŖåŧãĢ非推åĨ¨ã¨ãĒりぞした:

Hash

ãƒãƒƒã‚ˇãƒĨé–ĸ数ãĢį„ĄåŠšãĒã‚Ēãƒ—ã‚ˇãƒ§ãƒŗã‚’æ¸Ąã™ã“ã¨ã¯éžæŽ¨åĨ¨ã¨ãĒりぞした。

Intl

intlcal_set() ぞたは IntlCalendar::set() を 2 つをčļ…えるåŧ•数でå‘ŧãŗå‡ēすことは非推åĨ¨ã¨ãĒりぞした。 äģŖã‚ã‚ŠãĢ IntlCalendar::setDate() ぞたは IntlCalendar::setDateTime() をäŊŋį”¨ã—ãĻください。

intlgregcal_create_instance() ぞたは IntlGregorianCalendar::__construct() を 2 つをčļ…えるåŧ•数でå‘ŧãŗå‡ēすことは非推åĨ¨ã¨ãĒりぞした。 äģŖã‚ã‚ŠãĢ IntlGregorianCalendar::createFromDate() ぞたは IntlGregorianCalendar::createFromDateTime() をäŊŋį”¨ã—ãĻください。

LDAP

ldap_connect() を 2 つをčļ…えるåŧ•数でå‘ŧãŗå‡ēすことは非推åĨ¨ã¨ãĒりぞした。 äģŖã‚ã‚ŠãĢ ldap_connect_wallet() をäŊŋį”¨ã—ãĻください。

ldap_exop() を 4 つをčļ…えるåŧ•数でå‘ŧãŗå‡ēすことは非推åĨ¨ã¨ãĒりぞした。 äģŖã‚ã‚ŠãĢ ldap_exop_sync() をäŊŋį”¨ã—ãĻください。

MySQLi

mysqli_ping() é–ĸæ•°ãŠã‚ˆãŗ mysqli::ping() ãƒĄã‚Ŋッドは、 PHP 8.2.0 で再æŽĨįПčƒŊが削除されたため、非推åĨ¨ã¨ãĒりぞした。

mysqli_kill() é–ĸæ•°ãŠã‚ˆãŗ mysqli::kill() ãƒĄã‚Ŋッド は非推åĨ¨ã¨ãĒりぞした。 こぎ抟čƒŊがåŋ…čρãĒ場合は、äģŖã‚ã‚ŠãĢ SQL ぎ KILL ã‚ŗãƒžãƒŗãƒ‰ã‚’äŊŋį”¨ã§ããžã™ã€‚

mysqli_refresh() é–ĸæ•°ãŠã‚ˆãŗ mysqli::refresh() ãƒĄã‚Ŋッドは 非推åĨ¨ã¨ãĒりぞした。 こぎ抟čƒŊがåŋ…čρãĒ場合は、äģŖã‚ã‚ŠãĢ SQL ぎ FLUSH ã‚ŗãƒžãƒŗãƒ‰ をäŊŋį”¨ã§ããžã™ã€‚ すずãĻぎ MYSQLI_REFRESH_* 厚数も非推åĨ¨ã¨ãĒりぞした。

mysqli_store_result() ãĢ mode ãƒ‘ãƒŠãƒĄãƒŧã‚ŋを明į¤ēįš„ãĢæ¸Ąã™ã“ã¨ã¯éžæŽ¨åĨ¨ã¨ãĒりぞした。 こぎé–ĸ数ぎためãĢį”¨æ„ã•ã‚ŒãĻいたMYSQLI_STORE_RESULT_COPY_DATA 厚数も 非推åĨ¨ã¨ãĒりぞした。

PDO_PGSQL

ドãƒĢč¨˜åˇã§å›˛ãžã‚ŒãŸæ–‡å­—åˆ—ãŽä¸­ã§ ã‚¨ã‚šã‚ąãƒŧãƒ—ã•ã‚ŒãŸį–‘å•įŦĻīŧˆ??īŧ‰ã‚’äŊŋį”¨ã™ã‚‹ã“ã¨ã¯éžæŽ¨åĨ¨ã¨ãĒりぞした。 PDO_PGSQL はドãƒĢč¨˜åˇã§å›˛ãžã‚ŒãŸæ–‡å­—åˆ—ã‚’ã‚ĩポãƒŧトするį‹Ŧč‡Ēぎ SQL パãƒŧã‚ĩãƒŧを持つようãĢãĒãŖãŸãŸã‚ã€ ãã‚Œã‚‰ãŽä¸­ã§į–‘å•įŦĻã‚’ã‚¨ã‚šã‚ąãƒŧプするåŋ…čĻã¯ãĒくãĒりぞした。

PGSQL

pg_fetch_result()、 pg_field_prtlen()、 ãŠã‚ˆãŗ pg_field_is_null() ぎ 2 åŧ•æ•°ãŽã‚ˇã‚°ãƒãƒãƒŖã¯éžæŽ¨åĨ¨ã¨ãĒりぞした。 äģŖã‚ã‚ŠãĢ row を null ãĢč¨­åŽšã—ãŸ 3 åŧ•æ•°ãŽã‚ˇã‚°ãƒãƒãƒŖã‚’ äŊŋį”¨ã—ãĻください。

Random

lcg_value() は非推åĨ¨ã¨ãĒりぞした。 こぎé–ĸæ•°ã¯č¤‡æ•°ãŽį‚šã§å•éĄŒãŒã‚ã‚‹ãŸã‚ã§ã™ã€‚ äģŖã‚ã‚ŠãĢ Random\Randomizer::getFloat() をäŊŋį”¨ã—ãĻください。

Reflection

ReflectionMethod::__construct() を 1 つぎåŧ•数でå‘ŧãŗå‡ēすことは非推åĨ¨ã¨ãĒりぞした。 äģŖã‚ã‚ŠãĢ ReflectionMethod::createFromMethodName() をäŊŋį”¨ã—ãĻください。

Session

session_set_save_handler() を 2 つをčļ…えるåŧ•数でå‘ŧãŗå‡ēすことは非推åĨ¨ã¨ãĒりぞした。 2 åŧ•æ•°ãŽã‚ˇã‚°ãƒãƒãƒŖã‚’äŊŋį”¨ã—ãĻください。

session.sid_length ãŠã‚ˆãŗ session.sid_bits_per_character ぎ INI č¨­åŽšå€¤ã‚’å¤‰æ›´ã™ã‚‹ã“ã¨ã¯éžæŽ¨åĨ¨ã¨ãĒりぞした。 ã‚ģãƒƒã‚ˇãƒ§ãƒŗã‚šãƒˆãƒŦãƒŧã‚¸ãƒãƒƒã‚¯ã‚¨ãƒŗãƒ‰ã‚’äŋŽæ­Ŗã—、 16 é€˛æ•° 32 文字ãĢよる ã‚ģãƒƒã‚ˇãƒ§ãƒŗ ID を受けå…ĨれるようãĢし、これら 2 つぎ INI č¨­åŽšã‚’å¤‰æ›´ã™ã‚‹ãŽã‚’ã‚„ã‚ãĻください。

session.use_only_cookies、 session.use_trans_sid、 session.trans_sid_tags、 session.trans_sid_hostsã€ãŠã‚ˆãŗ session.referer_check ぎ INI č¨­åŽšå€¤ã‚’å¤‰æ›´ã™ã‚‹ã“ã¨ã¯éžæŽ¨åĨ¨ã¨ãĒりぞした。 SID 厚数も非推åĨ¨ã¨ãĒりぞした。

SOAP

SoapServer::addFunction() ãĢ int ã‚’æ¸Ąã™ã“ã¨ã¯éžæŽ¨åĨ¨ã¨ãĒりぞした。 すずãĻぎ PHP é–ĸ数を提䞛するåŋ…čĻãŒã‚ã‚‹å ´åˆã¯ã€ get_defined_functions() がčŋ”す配列をフナット化しãĻください。

SOAP_FUNCTIONS_ALL 厚数は非推åĨ¨ã¨ãĒりぞした。

SPL

SplFixedArray::__wakeup() ãƒĄã‚Ŋッドは 非推åĨ¨ã¨ãĒりぞした。äģŖã‚ã‚ŠãĢ SplFixedArray::__serialize() と SplFixedArray::__unserialize() をã‚ĒãƒŧバãƒŧナイドしãĻください。

SplFileObject::setCsvControl()、 SplFileObject::fputcsv()ã€ãŠã‚ˆãŗ SplFileObject::fgetcsv() で escape ãƒ‘ãƒŠãƒĄãƒŧã‚ŋぎデフりãƒĢãƒˆå€¤ã‚’åˆŠį”¨ã™ã‚‹ã“ã¨ã¯éžæŽ¨åĨ¨ã¨ãĒりぞした。 åŧ•数ぞたは名前äģ˜ãåŧ•数で明į¤ēįš„ãĢ指厚するåŋ…čĻãŒã‚ã‚Šãžã™ã€‚ これは、SplFileObject::setCsvControl() で 新しいデフりãƒĢãƒˆå€¤ã‚’č¨­åŽšã—ãŸå ´åˆã€SplFileObject::fputcsv() ãŠã‚ˆãŗ SplFileObject::fgetcsv() ãĢã¯éŠį”¨ã•ã‚Œãžã›ã‚“ã€‚

Standard

stream_context_set_option() を 2 つぎåŧ•数でå‘ŧãŗå‡ēすことは非推åĨ¨ã¨ãĒりぞした。 äģŖã‚ã‚ŠãĢ stream_context_set_options() をäŊŋį”¨ã—ãĻください。

unserialize() で大文字ぎ S ã‚ŋグをäŊŋį”¨ã—ãĻ文字列を ã‚ĸãƒŗã‚ˇãƒĒã‚ĸナイã‚ēすることは非推åĨ¨ã¨ãĒりぞした。

fputcsv()、 fgetcsv()ã€ãŠã‚ˆãŗ str_getcsv() ぎ escape ãƒ‘ãƒŠãƒĄãƒŧã‚ŋぎデフりãƒĢãƒˆå€¤ã‚’åˆŠį”¨ã™ã‚‹ã“ã¨ã¯éžæŽ¨åĨ¨ã¨ãĒりぞした。 åŧ•数ぞたは名前äģ˜ãåŧ•数で明į¤ēįš„ãĢ指厚するåŋ…čĻãŒã‚ã‚Šãžã™ã€‚

XML

xml_set_object() é–ĸ数は非推åĨ¨ã¨ãĒりぞした。

callable でãĒい文字列を xml_set_* é–ĸ数ãĢæ¸Ąã™ã“ã¨ã¯éžæŽ¨åĨ¨ã¨ãĒりぞした。

īŧ‹add a note

User Contributed Notes 1 note

up
3
john dot fro at mailinator dot com Âļ
1 year ago
Try using [$this, 'method_string'] in place of 'method_string' for functions like xml_set_element_handler, etc. 

As in xml_set_element_handler($this-parser, [$this, 'method'], [$this, 'another_method']);  

This is what the note about "callable" means--you need to reference the actual method in a callable way, not just use a string.