From 7fad4317ddff6adeebd60be347c8624bd180880b Mon Sep 17 00:00:00 2001 From: lamentxu <1372449351@qq.com> Date: Mon, 27 Apr 2026 22:33:21 +0800 Subject: [PATCH 1/2] initial version 1.0 --- NEWS | 1 + UPGRADING | 5 +++++ ext/standard/basic_functions.stub.php | 1 + ext/standard/tests/strings/bug44242.phpt | 6 +++--- ext/standard/tests/strings/bug47443.phpt | 6 +++--- ext/standard/tests/strings/bug48709.phpt | 2 +- ext/standard/tests/strings/metaphone.phpt | 12 ++++++------ .../tests/strings/metaphone_deprecation.phpt | 11 +++++++++++ 8 files changed, 31 insertions(+), 13 deletions(-) create mode 100644 ext/standard/tests/strings/metaphone_deprecation.phpt diff --git a/NEWS b/NEWS index 5be5ffd18ac4..27fcb54d3368 100644 --- a/NEWS +++ b/NEWS @@ -179,6 +179,7 @@ PHP NEWS (Weilin Du) . getenv() and putenv() now raises a ValueError when the first argument contains null bytes. (Weilin Du) + . metaphone() is now deprecated. (Weilin Du) - Streams: . Added so_keepalive, tcp_keepidle, tcp_keepintvl and tcp_keepcnt stream diff --git a/UPGRADING b/UPGRADING index 6c6115ebcc84..dfddfe011b2c 100644 --- a/UPGRADING +++ b/UPGRADING @@ -154,6 +154,11 @@ PHP 8.6 UPGRADE NOTES 4. Deprecated Functionality ======================================== +- Standard: + . metaphone() is deprecated. + Please use a userland phonetic matching library instead. + RFC: https://wiki.php.net/rfc/deprecate-metaphone + ======================================== 5. Changed Functions ======================================== diff --git a/ext/standard/basic_functions.stub.php b/ext/standard/basic_functions.stub.php index 1999c9b92be1..677effdae56f 100644 --- a/ext/standard/basic_functions.stub.php +++ b/ext/standard/basic_functions.stub.php @@ -2239,6 +2239,7 @@ function inet_pton(string $ip): string|false {} /* metaphone.c */ /** @refcount 1 */ +#[\Deprecated(since: '8.6')] function metaphone(string $string, int $max_phonemes = 0): string {} /* {{{ head.c */ diff --git a/ext/standard/tests/strings/bug44242.phpt b/ext/standard/tests/strings/bug44242.phpt index 00adda2be670..8f3bf627a265 100644 --- a/ext/standard/tests/strings/bug44242.phpt +++ b/ext/standard/tests/strings/bug44242.phpt @@ -3,9 +3,9 @@ Bug #44242 (metaphone('CMXFXM') crashes PHP) --FILE-- --EXPECT-- diff --git a/ext/standard/tests/strings/bug47443.phpt b/ext/standard/tests/strings/bug47443.phpt index e673e807ee85..08844f83af23 100644 --- a/ext/standard/tests/strings/bug47443.phpt +++ b/ext/standard/tests/strings/bug47443.phpt @@ -3,9 +3,9 @@ Bug #47443 (metaphone('scratch') returns wrong result) --FILE-- --EXPECT-- diff --git a/ext/standard/tests/strings/bug48709.phpt b/ext/standard/tests/strings/bug48709.phpt index 9e0789a61f24..0c8ee5496c61 100644 --- a/ext/standard/tests/strings/bug48709.phpt +++ b/ext/standard/tests/strings/bug48709.phpt @@ -16,7 +16,7 @@ $exceptions = array( ); foreach ($exceptions as $letter) { - printf("%s => %s\n", $letter, metaphone($letter)); + printf("%s => %s\n", $letter, @metaphone($letter)); } ?> diff --git a/ext/standard/tests/strings/metaphone.phpt b/ext/standard/tests/strings/metaphone.phpt index 6b8f5c1c89d9..e44a84e4b79e 100644 --- a/ext/standard/tests/strings/metaphone.phpt +++ b/ext/standard/tests/strings/metaphone.phpt @@ -3,16 +3,16 @@ metaphone() tests --FILE-- getMessage(), "\n"; } -var_dump(metaphone("valid phrase", 0)); -var_dump(metaphone("valid phrase", 10000)); +var_dump(@metaphone("valid phrase", 0)); +var_dump(@metaphone("valid phrase", 10000)); $array = array( "They fell forward, grovelling heedlessly on the cold earth.", @@ -22,7 +22,7 @@ $array = array( ); foreach($array as $str) { - var_dump(metaphone($str)); + var_dump(@metaphone($str)); } echo "Done\n"; diff --git a/ext/standard/tests/strings/metaphone_deprecation.phpt b/ext/standard/tests/strings/metaphone_deprecation.phpt new file mode 100644 index 000000000000..a6cf84d496bc --- /dev/null +++ b/ext/standard/tests/strings/metaphone_deprecation.phpt @@ -0,0 +1,11 @@ +--TEST-- +metaphone() deprecation +--FILE-- + +--EXPECTF-- +Deprecated: Function metaphone() is deprecated since 8.6 in %s on line %d +string(7) "PRKRMNK" From f9f8b7221aa95729562c76fdebc8d1d8a1a10a24 Mon Sep 17 00:00:00 2001 From: lamentxu <1372449351@qq.com> Date: Tue, 28 Apr 2026 12:33:23 +0800 Subject: [PATCH 2/2] fix header files --- ext/standard/basic_functions_arginfo.h | 9 +++++++-- ext/standard/basic_functions_decl.h | 8 ++++---- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/ext/standard/basic_functions_arginfo.h b/ext/standard/basic_functions_arginfo.h index e51a837ffa4d..22c5d987a2a4 100644 --- a/ext/standard/basic_functions_arginfo.h +++ b/ext/standard/basic_functions_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit basic_functions.stub.php instead. - * Stub hash: 36b71aa7bbfe478a5e4af400b2822a77067efa2f + * Stub hash: 98e3535dd6c306b2198f2fe4635820cf65685093 * Has decl header: yes */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_set_time_limit, 0, 1, _IS_BOOL, 0) @@ -3121,7 +3121,7 @@ static const zend_function_entry ext_functions[] = { #endif ZEND_FE(inet_ntop, arginfo_inet_ntop) ZEND_FE(inet_pton, arginfo_inet_pton) - ZEND_FE(metaphone, arginfo_metaphone) + ZEND_RAW_FENTRY("metaphone", zif_metaphone, arginfo_metaphone, ZEND_ACC_DEPRECATED, NULL, NULL) ZEND_FE(header, arginfo_header) ZEND_FE(header_remove, arginfo_header_remove) ZEND_FE(setrawcookie, arginfo_setrawcookie) @@ -3926,6 +3926,11 @@ static void register_basic_functions_symbols(int module_number) attribute_Deprecated_func_strptime_0->args[1].name = ZSTR_KNOWN(ZEND_STR_MESSAGE); #endif + zend_attribute *attribute_Deprecated_func_metaphone_0 = zend_add_function_attribute(zend_hash_str_find_ptr(CG(function_table), "metaphone", sizeof("metaphone") - 1), ZSTR_KNOWN(ZEND_STR_DEPRECATED_CAPITALIZED), 1); + zend_string *attribute_Deprecated_func_metaphone_0_arg0_str = zend_string_init("8.6", strlen("8.6"), 1); + ZVAL_STR(&attribute_Deprecated_func_metaphone_0->args[0].value, attribute_Deprecated_func_metaphone_0_arg0_str); + attribute_Deprecated_func_metaphone_0->args[0].name = ZSTR_KNOWN(ZEND_STR_SINCE); + zend_attribute *attribute_Deprecated_func_assert_options_0 = zend_add_function_attribute(zend_hash_str_find_ptr(CG(function_table), "assert_options", sizeof("assert_options") - 1), ZSTR_KNOWN(ZEND_STR_DEPRECATED_CAPITALIZED), 1); ZVAL_STR(&attribute_Deprecated_func_assert_options_0->args[0].value, ZSTR_KNOWN(ZEND_STR_8_DOT_3)); attribute_Deprecated_func_assert_options_0->args[0].name = ZSTR_KNOWN(ZEND_STR_SINCE); diff --git a/ext/standard/basic_functions_decl.h b/ext/standard/basic_functions_decl.h index b3eb25c5d988..b0780b2be785 100644 --- a/ext/standard/basic_functions_decl.h +++ b/ext/standard/basic_functions_decl.h @@ -1,8 +1,8 @@ /* This is a generated file, edit basic_functions.stub.php instead. - * Stub hash: 36b71aa7bbfe478a5e4af400b2822a77067efa2f */ + * Stub hash: 98e3535dd6c306b2198f2fe4635820cf65685093 */ -#ifndef ZEND_BASIC_FUNCTIONS_DECL_36b71aa7bbfe478a5e4af400b2822a77067efa2f_H -#define ZEND_BASIC_FUNCTIONS_DECL_36b71aa7bbfe478a5e4af400b2822a77067efa2f_H +#ifndef ZEND_BASIC_FUNCTIONS_DECL_98e3535dd6c306b2198f2fe4635820cf65685093_H +#define ZEND_BASIC_FUNCTIONS_DECL_98e3535dd6c306b2198f2fe4635820cf65685093_H typedef enum zend_enum_SortDirection { ZEND_ENUM_SortDirection_Ascending = 1, @@ -20,4 +20,4 @@ typedef enum zend_enum_RoundingMode { ZEND_ENUM_RoundingMode_PositiveInfinity = 8, } zend_enum_RoundingMode; -#endif /* ZEND_BASIC_FUNCTIONS_DECL_36b71aa7bbfe478a5e4af400b2822a77067efa2f_H */ +#endif /* ZEND_BASIC_FUNCTIONS_DECL_98e3535dd6c306b2198f2fe4635820cf65685093_H */