Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:128457 X-Original-To: internals@lists.php.net Delivered-To: internals@lists.php.net Received: from php-smtp4.php.net (php-smtp4.php.net [45.112.84.5]) by lists.php.net (Postfix) with ESMTPS id 5E6261A00BC for ; Wed, 13 Aug 2025 09:16:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=php.net; s=mail; t=1755076482; bh=4alKYFUSHhAqtbqof7A77eOcMiXRnFBpXsiKuu5625A=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=hjL1zN4MMV6ngIB+7lG56t0z6s3HPJP/rVEQJG5EjfiIBD6YDEq6Y2b0sWtDFD0GM UF5hCw9sBAX85XWSt53o+haTzjntWO6Thr0fVfC62WzjVaz8/+nTBTuP1BL/dD30uC Y7Atp0Ubn8itXKI2L00DQwAqqeKf7MunUxaW7im6nsqF7WYofXcpHBS/dimcRRUG2a 9GpzZ9zaYpusDKz+CBMoKe2bCvShQxIuiMvnW3BKpR/VrkSGrJgrK+JMJxG5HgQBHn uMH0MHJi7TlFl5BQCxDB8yQs4eeUE6ublX41TeNKfNEkwhMtsBcKOcz6nML9bJ8H5B g0LqaLs2+K2cg== Received: from php-smtp4.php.net (localhost [127.0.0.1]) by php-smtp4.php.net (Postfix) with ESMTP id 784D118005D for ; Wed, 13 Aug 2025 09:14:41 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on php-smtp4.php.net X-Spam-Level: X-Spam-Status: No, score=1.0 required=5.0 tests=BAYES_00,DMARC_NONE, FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS, HTML_MESSAGE,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL, SPF_HELO_NONE,SPF_PASS autolearn=no autolearn_force=no version=4.0.1 X-Spam-Virus: No X-Envelope-From: Received: from mail-oo1-f47.google.com (mail-oo1-f47.google.com [209.85.161.47]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by php-smtp4.php.net (Postfix) with ESMTPS for ; Wed, 13 Aug 2025 09:14:41 +0000 (UTC) Received: by mail-oo1-f47.google.com with SMTP id 006d021491bc7-6196c753e66so1026096eaf.2 for ; Wed, 13 Aug 2025 02:16:18 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755076578; x=1755681378; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=4alKYFUSHhAqtbqof7A77eOcMiXRnFBpXsiKuu5625A=; b=HfjaEbJUpyALzVqoucoxNLCsxak82D8YXbxgYKRXHGxUxS0jsnTTfuHwC3BZyZJrra +l0J9hL8agfkbWpsBdiIS+5gDAhV5vryAhShl3ui4PN2nrjqj4iZsF3ZPqoezahrpoUo DvOSGtWcoDau4eO9at5GID+3C4cjwKrtjoCpyFrlCGkInaC00x+3tOGDPw+Gp6zxsRJQ jBMvhk8XXu3H9l00V4KwpIDE7PsnXNgzPCU5uGadsAHE0D01ZvUZ6LvC6oUjze9gfQr5 OyZIYQEuldG5lJbjxZlS7rDFesyc3/4U/RwczQ369qptZmXdQkzolqxQEawJU+ICnVgz d08A== X-Forwarded-Encrypted: i=1; AJvYcCWlYl1BV4SH8L1XfhCYl+0C0crYeCI9rNUboLdRtNCFNQiaSZ5y6Pde2vmoHaAideKYhW3gzBHU0Cc=@lists.php.net X-Gm-Message-State: AOJu0Ywik9E01tO6uEWTz66VqgAUHwCX4bl4rc8HVlDt/L/FWaObp7qO vo/980CNKZ2/621w2mW7h8Mxrk0fRk6k6IdMiGq6jX06/6SE+MroErcgsfL7RxWBB1uMl6RHX0+ NAyGbpbBNznE/TTuQYV6NtgAIVGA2p9Q= X-Gm-Gg: ASbGncvFcUzOymoxn/BegVSUD2xfcv+f15bWayDZaJTSUnbsUmn2Fa599xc50hXfVp6 Z2RdqJP4Chq4HRP8ZlZr1Tjjalr+DKvVE35C1d3ggUke2m80sckR3XUrVWR6isGAwXOJs9WJe9x ynxeOsOSyDWCgAOWnZUuQa4FEahYTSx3Dm5rIIaBa5/z+f2/UTUrv0Vfy1bVZBye0xZIhmsmCed 9+XUZo= X-Google-Smtp-Source: AGHT+IE2Zvul6CUreo5IBBF7N63hiOTnCGKq4o0NNb232cdO44Qpzd40CJkTkKrJyYgCt5V3bpJL8HX99GtArIKS8vw= X-Received: by 2002:a05:6808:50a3:b0:435:73aa:1562 with SMTP id 5614622812f47-435d415113emr1366946b6e.13.1755076577676; Wed, 13 Aug 2025 02:16:17 -0700 (PDT) Precedence: list list-help: list-post: List-Id: x-ms-reactions: disallow MIME-Version: 1.0 References: In-Reply-To: Date: Wed, 13 Aug 2025 11:16:05 +0200 X-Gm-Features: Ac12FXyzvrPpRQs2txAKHSOOHRBO_uLfFFOgxgoUR_QBWBKsYP5cu4ICR5ev058 Message-ID: Subject: Re: [PHP-DEV] [RFC] [VOTE] Deprecations for PHP 8.5 To: Nicolas Grekas Cc: "Gina P. Banyard" , PHP internals Content-Type: multipart/alternative; boundary="000000000000f75296063c3b9b50" From: bukka@php.net (Jakub Zelenka) --000000000000f75296063c3b9b50 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Aug 13, 2025 at 11:03=E2=80=AFAM Nicolas Grekas < nicolas.grekas+php@gmail.com> wrote: > > > Le ven. 8 ao=C3=BBt 2025 =C3=A0 22:10, Gina P. Banyard a =C3=A9crit : > >> On Friday, 25 July 2025 at 13:56, Gina P. Banyard >> wrote: >> >> > Hello internals, >> > >> > As Tim announced a few days ago, I've opened the votes for the >> deprecations: >> > https://wiki.php.net/rfc/deprecations_php_8_5 >> > >> > Please remember that the wiki is only capable to handle a single vote >> at a time, >> > so please submit each vote you intend on casting individually. >> > >> >> Hello internals, >> >> After two weeks of voting, I closed the votes of the "Deprecations for >> PHP 8.5" RFC at 19:45 UTC. >> >> The following proposals have been accepted: >> >> - Deprecate semicolon after case in switch statement (22 yay, 10 nay, >> 68.8%) >> - Deprecate non-standard cast names (32 yay, 0 nay, 100%) >> - Deprecate backticks as an alias for shell_exec (21 yay, 8 nay, 72.4%) >> - Deprecate the __sleep() and __wakeup() magic methods (18 yay, 9 nay, >> 66.7%) >> - Deprecate using values null as an array offset and when calling >> array_key_exists() (25 yay, 3 nay, 89.3%) >> - Deprecate __debugInfo() returning null (22 yay, 5 nay, 81.5%) >> - Deprecate constant redeclaration (31 yay, 0 nay, 100%) >> - Deprecate closure binding issues (29 yay, 0 nay, 100%) >> - Enact follow-up phase of the "Path to Saner Increment/Decrement >> operators" RFC (23 yay, 4 nay, 85.2%) >> - Deprecate the report_memleaks INI directive (23 yay, 2 nay, 92.0%) >> - Deprecate the register_argc_argv INI directive (27 yay, 0 nay, 100%) >> - Remove disable_classes INI setting (26 yay, 0 nay, 100%) >> - Deprecate Reflection*::setAccessible() (24 yay, 0 nay, 100%) >> - Deprecate ReflectionClass::getConstant() for missing constants (25 yay= , >> 0 nay, 100%) >> - Deprecate ReflectionProperty::getDefaultValue() for properties without >> default values (21 yay, 2 nay, 89.5%) >> - Deprecate ArrayObject and ArrayIterator with objects (26 yay, 0 nay, >> 100%) >> - Deprecate SplObjectStorage::contains(), SplObjectStorage::attach(), an= d >> SplObjectStorage::detach() (17 yay, 2 nay, 89.5%) >> - Deprecate passing spl_autoload_call() to spl_autoload_unregister() (23 >> yay, 0 nay, 100%) >> - Deprecate the $exclude_disabled parameter of get_defined_functions() >> (23 yay, 0 nay, 100%) >> - Deprecate passing null to readdir(), rewinddir(), and closedir() (24 >> yay, 3 nay, 88.9%) >> - Deprecate passing string which are not one byte long to ord() (20 yay, >> 4 nay, 83.3%) >> - Deprecate passing integers outside the interval [0, 255] to chr() (21 >> yay, 1 nay, 95.5%) >> - Formally deprecate socket_set_timeout (22 yay, 0 nay, 100%) >> - Deprecate the $http_response_header predefined variable (22 yay, 2 nay= , >> 91.7%) >> - [ODBC] Remove flags for building against specific drivers directly (16 >> yay, 0 nay, 100%) >> - Remove support for older ODBC versions (15 yay, 0 nay, 100%) >> - Deprecate PDO's 'uri:' scheme (22 yay, 0 nay, 100%) >> - Deprecate driver specific PDO constants and methods (17 yay, 6 nay, >> 73.9%) >> - Deprecate Pdo\Pgsql constants related to statement transaction state >> (17 yay, 0 nay, 100%) >> - Deprecate finfo_close() (24 yay, 2 nay, 92.3%) >> - Deprecate xml_parser_free() (22 yay, 2 nay, 91.7%) >> - Deprecate curl_close() (23 yay, 3 nay, 88.5%) >> - Deprecate curl_share_close() (23 yay, 3 nay, 88.5%) >> - Deprecate imagedestroy() (23 yay, 2 nay, 92.0%) >> - Deprecate key_length parameter of openssl_pkey_derive() (24 yay, 0 nay= , >> 100%) >> - Deprecate intl.error_level INI setting (22 yay, 0 nay, 100%) >> - Formally deprecate mysqli_execute() (22 yay, 0 nay, 100%) >> - Deprecate building ext/ldap against Oracle LDAP (19 yay, 0 nay, 100%) >> - Deprecate the $context parameter for finfo_buffer() (24 yay, 0 nay, >> 100%) >> - Deprecate DATE_RFC7231 and DateTimeInterface::RFC7231 (22 yay, 0 nay, >> 100%) >> >> And the following proposals have been rejected: >> >> - Deprecate attributes applying to multiple class properties/constants (= 5 >> yay, 19 nay, 20.8%) >> - Deprecate ReflectionParameter::allowsNull() (9 yay, 10 nay, 47.4%) >> - Deprecate non-canonical type names for settype() (8 yay, 10 nay, 44.4%= ) >> - Deprecate FILTER_DEFAULT constant (12 yay, 10 nay, 54.5%) >> - Make $filter parameter mandatory for filter_*() functions (9 yay, 10 >> nay, 47.4%) >> - Deprecate PDO::ERRMODE_WARNING error mode (8 yay, 12 nay, 40.0%) >> >> Thank you to everyone that has voted and participated in the discussions= . >> >> Best regards, >> >> Gina P. Banyard >> > > I=E2=80=99d like to raise some concerns about the decision to deprecate _= _sleep() > and __wakeup(). > > While I understand the intention behind moving toward __serialize() and > __unserialize(), in practice the migration path is often non-trivial. For > example, in Symfony=E2=80=99s codebase there are numerous cases where swi= tching > requires deep knowledge of PHP=E2=80=99s serialization format to maintain > compatibility with existing payloads. This is essential so that updated > applications can still communicate with older versions. > > For many projects, this will be a significant burden, especially given > that __sleep() and __wakeup() have historically worked well for these use > cases. I=E2=80=99m concerned that the practical cost to the community may= outweigh > the benefits, particularly since the rationale for removal seems, at leas= t > from a user=E2=80=99s perspective, debatable. > > Fully agree and this is exactly what I noted in https://github.com/php/php-src/pull/19435 . I think this RFC was very poor in showing the effort that is needed for migration as it was represented like a trivial thing. Kind regards Jakub --000000000000f75296063c3b9b50 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


On Wed, Aug 13,= 2025 at 11:03=E2=80=AFAM Nicolas Grekas <nicolas.grekas+php@gmail.com> wrote:


Le=C2=A0ven. 8 ao=C3=BBt 2025 =C3=A0=C2=A022:10, Gina P. Banya= rd <internals@gpb.moe> a =C3=A9crit=C2=A0:
On Friday, 25 July 2025 at 13:56, Gina P. = Banyard <internals@gpb.moe> wrote:

> Hello internals,
>
> As Tim announced a few days ago, I've opened the votes for the dep= recations:
> https://wiki.php.net/rfc/deprecations_php_8_5<= br> >
> Please remember that the wiki is only capable to handle a single vote = at a time,
> so please submit each vote you intend on casting individually.
>

Hello internals,

After two weeks of voting, I closed the votes of the "Deprecations for= PHP 8.5" RFC at 19:45 UTC.

The following proposals have been accepted:

- Deprecate semicolon after case in switch statement (22 yay, 10 nay, 68.8%= )
- Deprecate non-standard cast names (32 yay, 0 nay, 100%)
- Deprecate backticks as an alias for shell_exec (21 yay, 8 nay, 72.4%)
- Deprecate the __sleep() and __wakeup() magic methods (18 yay, 9 nay, 66.7= %)
- Deprecate using values null as an array offset and when calling array_key= _exists() (25 yay, 3 nay, 89.3%)
- Deprecate __debugInfo() returning null (22 yay, 5 nay, 81.5%)
- Deprecate constant redeclaration (31 yay, 0 nay, 100%)
- Deprecate closure binding issues (29 yay, 0 nay, 100%)
- Enact follow-up phase of the "Path to Saner Increment/Decrement oper= ators" RFC (23 yay, 4 nay, 85.2%)
- Deprecate the report_memleaks INI directive (23 yay, 2 nay, 92.0%)
- Deprecate the register_argc_argv INI directive (27 yay, 0 nay, 100%)
- Remove disable_classes INI setting (26 yay, 0 nay, 100%)
- Deprecate Reflection*::setAccessible() (24 yay, 0 nay, 100%)
- Deprecate ReflectionClass::getConstant() for missing constants (25 yay, 0= nay, 100%)
- Deprecate ReflectionProperty::getDefaultValue() for properties without de= fault values (21 yay, 2 nay, 89.5%)
- Deprecate ArrayObject and ArrayIterator with objects (26 yay, 0 nay, 100%= )
- Deprecate SplObjectStorage::contains(), SplObjectStorage::attach(), and S= plObjectStorage::detach() (17 yay, 2 nay, 89.5%)
- Deprecate passing spl_autoload_call() to spl_autoload_unregister() (23 ya= y, 0 nay, 100%)
- Deprecate the $exclude_disabled parameter of get_defined_functions() (23 = yay, 0 nay, 100%)
- Deprecate passing null to readdir(), rewinddir(), and closedir() (24 yay,= 3 nay, 88.9%)
- Deprecate passing string which are not one byte long to ord() (20 yay, 4 = nay, 83.3%)
- Deprecate passing integers outside the interval [0, 255] to chr() (21 yay= , 1 nay, 95.5%)
- Formally deprecate socket_set_timeout (22 yay, 0 nay, 100%)
- Deprecate the $http_response_header predefined variable (22 yay, 2 nay, 9= 1.7%)
- [ODBC] Remove flags for building against specific drivers directly (16 ya= y, 0 nay, 100%)
- Remove support for older ODBC versions (15 yay, 0 nay, 100%)
- Deprecate PDO's 'uri:' scheme (22 yay, 0 nay, 100%)
- Deprecate driver specific PDO constants and methods (17 yay, 6 nay, 73.9%= )
- Deprecate Pdo\Pgsql constants related to statement transaction state (17 = yay, 0 nay, 100%)
- Deprecate finfo_close() (24 yay, 2 nay, 92.3%)
- Deprecate xml_parser_free() (22 yay, 2 nay, 91.7%)
- Deprecate curl_close() (23 yay, 3 nay, 88.5%)
- Deprecate curl_share_close() (23 yay, 3 nay, 88.5%)
- Deprecate imagedestroy() (23 yay, 2 nay, 92.0%)
- Deprecate key_length parameter of openssl_pkey_derive() (24 yay, 0 nay, 1= 00%)
- Deprecate intl.error_level INI setting (22 yay, 0 nay, 100%)
- Formally deprecate mysqli_execute() (22 yay, 0 nay, 100%)
- Deprecate building ext/ldap against Oracle LDAP (19 yay, 0 nay, 100%)
- Deprecate the $context parameter for finfo_buffer() (24 yay, 0 nay, 100%)=
- Deprecate DATE_RFC7231 and DateTimeInterface::RFC7231 (22 yay, 0 nay, 100= %)

And the following proposals have been rejected:

- Deprecate attributes applying to multiple class properties/constants (5 y= ay, 19 nay, 20.8%)
- Deprecate ReflectionParameter::allowsNull() (9 yay, 10 nay, 47.4%)
- Deprecate non-canonical type names for settype() (8 yay, 10 nay, 44.4%) - Deprecate FILTER_DEFAULT constant (12 yay, 10 nay, 54.5%)
- Make $filter parameter mandatory for filter_*() functions (9 yay, 10 nay,= 47.4%)
- Deprecate PDO::ERRMODE_WARNING error mode (8 yay, 12 nay, 40.0%)

Thank you to everyone that has voted and participated in the discussions.
Best regards,

Gina P. Banyard

I=E2=80=99d like to raise so= me concerns about the decision to deprecate __sleep() and __wakeup().
While I understand the intention behind moving toward __serialize() and _= _unserialize(), in practice the migration path is often non-trivial. For ex= ample, in Symfony=E2=80=99s codebase there are numerous cases where switchi= ng requires deep knowledge of PHP=E2=80=99s serialization format to maintai= n compatibility with existing payloads. This is essential so that updated a= pplications can still communicate with older versions.

For many proj= ects, this will be a significant burden, especially given that __sleep() an= d __wakeup() have historically worked well for these use cases. I=E2=80=99m= concerned that the practical cost to the community may outweigh the benefi= ts, particularly since the rationale for removal seems, at least from a use= r=E2=80=99s perspective, debatable.

Fully agree and this is exactly what I noted in=C2=A0https://github.com/php/php-s= rc/pull/19435 . I think this RFC was very poor in showing the effort th= at is needed for migration as it was represented like a trivial thing.

Kind regards

Jakub
--000000000000f75296063c3b9b50--