Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:120718 Return-Path: Delivered-To: mailing list internals@lists.php.net Received: (qmail 63233 invoked from network); 29 Jun 2023 16:51:24 -0000 Received: from unknown (HELO php-smtp4.php.net) (45.112.84.5) by pb1.pair.com with SMTP; 29 Jun 2023 16:51:24 -0000 Received: from php-smtp4.php.net (localhost [127.0.0.1]) by php-smtp4.php.net (Postfix) with ESMTP id D4D671804BE for ; Thu, 29 Jun 2023 09:51:23 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on php-smtp4.php.net X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.2 X-Spam-ASN: AS8075 52.96.0.0/12 X-Spam-Virus: No X-Envelope-From: Received: from BL0PR02CU006.outbound.protection.outlook.com (mail-eastusazolkn19013058.outbound.protection.outlook.com [52.103.11.58]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by php-smtp4.php.net (Postfix) with ESMTPS for ; Thu, 29 Jun 2023 09:51:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=TAnc+igkDJowwlybDn3MZmNJMMRQk8pu4qY7MaeaaAPOTOZBZoUGfExrPk2ZCAq94qiSg9vCeHdz30rtjr/QqOwBk9bQ7C8iobqx9elASrshvhWf48RQqogiJPuLHWhmA4aTGLJiagEpKX81tKKlHMBjZT7JZ4APb/zF7eZBvIzO8G8BRciFa1jC1MKpqNNZPYY69VZdwtWiB32YFQRWgpUYvgRgB7YPpFjhYJDWdVh/oThMZMGQShLaC3enk4/huwoBtO5v0IQej9mp8JM3zOTZIDn3tW+3ITddEjxYWUmg3E/wfFbv0fywJCs/TNNfPX3/p5Fv4+t1aZpUaUYRJA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=t2aWEpDaaYUdqZPPMShMKhS25YEbgSfivlP5iGcT6ho=; b=IxXlpCpzvYLdTwph9+aOx3EJPSdWMKjPQyHhN9POs5VhdNK6IgFdMw+k1+ZqRtRunvTRw+uE8X0UtWXSttDXAGm5OtGw+0zPaH4AV9eJrhqMZRZ0fzxjzWYMPAGPSBHp/0qECG2qPMVWTJYaqbpUn4hjpOwP/LQqyFZCTskWtkK3QsSQhw3eJmGNcbWCl2wJmwjVvQZ4biSHx2woomDt4kW+RfPN6YwsECOnvljwopnymCLKXY7WuC6An9j25yQfAhCKTFlUDa+5W2peXiG8c1ClVEnIfhPuENBxn835PkdEhAma2gWeLSN/kszbeWZAxyYtymln8vgyVCS8xy05zA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=t2aWEpDaaYUdqZPPMShMKhS25YEbgSfivlP5iGcT6ho=; b=VBvsMJsPrsPYEbUW9f9D/7ZyQ4XoIHTvpL7nK/clXRqw3CMj+mWBchZnTkUr/NGZQ7UbY4p2a1VNNPxxHtRL++TqBw5ZaoNfz1h1LV7wFQvCb1d341lFD3ZItMKI+exEcOluXyaKqJ1lmvgpQ3xjYBiJos1bn03y7BGqApbH//hSD4Hr+gHJq7QWBC1NVFmeLSm3uZ7OjiNAp/11t7J3aDDXc6HuP6XWH1Ma/FS3YD1ZWucTfrTusTMvqfDW2fgfzZPkkJQujvbohEbD11I+iiiUMd3BAjhLuL+UtMC6Gxf2m7AOde5zYBrGpS3XYWcnk7MVOrmQ4nGYtJZ2+xGWiw== Received: from BN7PR05MB4033.namprd05.prod.outlook.com (2603:10b6:406:90::33) by DS7PR05MB7270.namprd05.prod.outlook.com (2603:10b6:5:2c3::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6521.24; Thu, 29 Jun 2023 16:51:21 +0000 Received: from BN7PR05MB4033.namprd05.prod.outlook.com ([fe80::caa8:dcd6:ca84:bb44]) by BN7PR05MB4033.namprd05.prod.outlook.com ([fe80::caa8:dcd6:ca84:bb44%7]) with mapi id 15.20.6521.026; Thu, 29 Jun 2023 16:51:21 +0000 To: Rowan Tommins , "internals@lists.php.net" CC: Nikita Popov Thread-Topic: [PHP-DEV] [RFC] [Vote] Deprecate functions with overloaded signatures Thread-Index: AQHZqDNOzscc7EYmMEqrpB8lsTz/k6+dZgkAgAAWZYCAAFdR/4AAsh6AgANtoEk= Date: Thu, 29 Jun 2023 16:51:21 +0000 Message-ID: References: <6B872612-2F31-49E0-949C-CDF6FB2B9BE4@benramsey.com> <57104d4a-6e7a-ab57-e2b2-7973ce4bb429@gmail.com> In-Reply-To: <57104d4a-6e7a-ab57-e2b2-7973ce4bb429@gmail.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: x-ms-exchange-messagesentrepresentingtype: 1 x-tmn: [NS5m/VI9FDD0xmrInm0SgaSngGMyiBofS9RDsLtrJro=] x-ms-publictraffictype: Email x-ms-traffictypediagnostic: BN7PR05MB4033:EE_|DS7PR05MB7270:EE_ x-ms-office365-filtering-correlation-id: 01c86b98-a828-4af8-16e8-08db78c110f8 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: Y2VTImY4N8uWAHT/ugZLvFY0K0ZdfjKC81w4G9ROYoPPKOLrDJNmxu/x+MAqFjVJIBUIBj4W6mwztrNKKiuyzcctcsiNiS8tr9yy6D0xirEFHeZN9NDypycsRHjz5Cjw5tNkogK1Er9AJpctVczGftnqRl3e02u2J1YViVUbMlznoL8b/DNT+fgnIwhyr6GXpd6QXNjm91FrlVAJCuqWRojUKOf1m2N1lEVyJwrzv2QDXxmxA5eb4juEUOce2RMStbOnOpqleEWAz8uh46gVbK0N9itgWAUG9YlQMaMIX76xu+k7C3+MFOCNOTbz3CvU8l57jvXXFIfQ4ZAb3BEVJ7nKin//lBkzjwXUiAWk6vDHjwpLKymVrjJl3nvqBbueh0y6YpnlH/ePzII8vfzKqV1mQp6MtMrRwNVs5orNJ2JBppEFYxBrX54OIzmxc3LyHd1udSry3XMLxqk63wIXP+bA3IHdtmYxk7I2X1r49Znqz4n4ZBbEpN8Fr6ucfLhv9BQadWPwRyB4h0iAWNkBwUF5jvHFezm3sSnid6HnbPI= x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?H4nVIu9G3v7Qpyl8bsKbFUwXiIDCjK/fb8T+XI2y2R0hsD0K9sCy0bbqVc?= =?iso-8859-1?Q?K9bNHbAmO8tI54M+O/MMcFRJuqWxmrez+NMcEmppd12jWNjfShbjZSj2Rv?= =?iso-8859-1?Q?7Zqw7vckw7h5Wwfp0mGMJQLh3nzLFVfU7PT/+d6mmi8W+s23qAE1F2o8qf?= =?iso-8859-1?Q?FXXHLf1MQCMxP4IQN+yaadeWhc36hR4bXlcQ4wRhAIHGQ+r0F2VyRI5Gyf?= =?iso-8859-1?Q?jSK9PCkpTAaiQIQH5C6sGJovXeBz2AYclnJL1HoA/bbMx/I2gt+/mABRxQ?= =?iso-8859-1?Q?7E6tUBjudEr+GnCZvZu+3ss3M3B37YYie6W31gXAHpBgbZmfo4Egx6ocXu?= =?iso-8859-1?Q?+nVzggQtZWdCXMJrPnl7ZUNe54xlGGXMOOqH6Eyw0kc6SNcm+/MbhLhyGf?= =?iso-8859-1?Q?/Js5g4Z85jEYWjb9irlALBqs34KaO/pIUZOyMQIEcZoTGZFWTlPpQurbGT?= =?iso-8859-1?Q?sKr5C8NpMm5pxNR0gHybfgNiETiUSqUaw+hM4wN/TxTggAtWHeK9FfFjKX?= =?iso-8859-1?Q?nttR0dm+8YFWCgvORUaxkqMQesXKxaA0PIlSRkP6c+PJaHiD/imM7nMy7F?= =?iso-8859-1?Q?aZARSjThW+wFmhoFuVFTKDobipKb7CeQ+Iw2v0Z+Z4ZXKkjueHubEc/EkK?= =?iso-8859-1?Q?f3BTqTZ8IVnH9bOLnG88ObEoCrw1CIpQ0JLSi4GpelA+boQ336RREPrmck?= =?iso-8859-1?Q?B8LX67y0w1TzRq/wzSiFlVGVIPgA20x6ltxdJ4wB1RV+5xWL/Mq0mYaTO7?= =?iso-8859-1?Q?JX29/FNWWu7DySEBiJkvxDoJk0BgoUx4As8D/915zfMXT12XdYBfOqPNtE?= =?iso-8859-1?Q?5Fb5mRDDjdr3dYQcGqFJhNev5XFwLt17FS5SvJ8AkvDm343gAayEQavXJv?= =?iso-8859-1?Q?W18uYsRPwLdJ+F+v7Lhij74v32/uvkpluDcN4ItqtUCxX8dJ8Y81EaXnb3?= =?iso-8859-1?Q?jJJA6VrZIuW+9hV+CSe01f8c2eQA8LelgUuqK2qCh1m8q/wLiSqIuQay53?= =?iso-8859-1?Q?iDQNBsaQM9TvKrkRIdCOItXs2bjE8/D8hK95zzyEx8vlDz/ZBmN+JkZNRp?= =?iso-8859-1?Q?NcitXnPbXJwSmStS2WEw9T9G/7QrD4EXZLQm1LEkwqV5M5J6ylVcBgP3ZL?= =?iso-8859-1?Q?Tp+DdQD2HwLxW7qD982jBf1CGRWHntA2fydXsRtmFC4+E7siAOaC3oAS+f?= =?iso-8859-1?Q?2v68wxptRFqNQJTCCbM4eaXOlO2OXTFmtQiX8OQdgdTStAPJFuPrlikgNf?= =?iso-8859-1?Q?/UBz12g4npwGaPInSmGA=3D=3D?= Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BN7PR05MB4033.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-CrossTenant-Network-Message-Id: 01c86b98-a828-4af8-16e8-08db78c110f8 X-MS-Exchange-CrossTenant-rms-persistedconsumerorg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-CrossTenant-originalarrivaltime: 29 Jun 2023 16:51:21.1365 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7PR05MB7270 Subject: Re: [PHP-DEV] [RFC] [Vote] Deprecate functions with overloaded signatures From: theodorejb@outlook.com (Theodore Brown) On Tue, June 27, 2023, 6:33 Rowan Tommins wrote:=0A= > On 27/06/2023 02:25, Theodore Brown wrote:=0A= > > Currently the following code returns only the array keys that loosely e= qual null:=0A= > >=0A= > > array_keys($array, null)=0A= > >=0A= > > If the function is changed to a single signature with $filter_value def= aulting to null (with an argument count check to preserve the above functio= nality), its behavior becomes a lot more surprising/unexpected. If a parame= ter defaults to null, as a user I don't expect the function to work differe= ntly when I explicitly pass the default value.=0A= > =0A= > =0A= > An alternative solution to this situation is to introduce a new dummy=0A= > value for such parameters, similar to how JavaScript uses the special=0A= > "Symbol" type to have keys that can't collide with any userland value.=0A= > In this context, this could be achieved with a single-value enum, i.e.:= =0A= > =0A= > enum ArrayKeys { case IncludeAll; }=0A= > =0A= > function array_keys(array $array, mixed $filter_value =3D=0A= > ArrayKeys::IncludeAll, bool $strict =3D false): array {}=0A= > =0A= > That way, the optional parameter has a real default value, distinct from= =0A= > any value the user might wish to filter by, including null, and full=0A= > compatibility is maintained with existing code.=0A= > =0A= > I don't know whether this is a direction we want to go, but thought I'd= =0A= > throw it out there.=0A= =0A= =0A= That's an interesting idea, but I'm not sure it would make the behavior any= less confusing. Are single-value enums used like this anywhere else in PHP= ? As a user my expectation when seeing `ArrayKeys::IncludeAll` as the defau= lt is that there must be other `ArrayKeys` enum values for additional optio= ns.=0A= =0A= Note that currently there is a draft RFC to support objects in array keys. = [1] If that feature is accepted, would it not be allowed to filter array ke= ys by the `ArrayKeys::IncludeAll` enum value? That would also be surprising= /unexpected.=0A= =0A= Based on the current vote tally, `array_keys` looks like it will be the onl= y remaining function in PHP 9 with an overloaded signature, which would mak= e it all the more strange.=0A= =0A= [1]: https://wiki.php.net/rfc/object_keys_in_arrays=