Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:125026 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 qa.php.net (Postfix) with ESMTPS id BCDB11A00BD for ; Sat, 17 Aug 2024 12:12:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=php.net; s=mail; t=1723896873; bh=Y+N5oMlmI/oUdTuvzJ1G4r+KxHlNqb9O2gDQ1S/4iXI=; h=Date:From:To:Subject:In-Reply-To:References:From; b=YP8qcXEKn36+0juRWuynKQqIdKlkV6yHnZrq3SWRUjeDW07Kmq0mbfsf44z8cjxFX CHt/sv77B1Bv1+Ng6qZi/55DqgN5w5sWyP03JkNilV+/gp+DXI5RvyQJSZ/CrKRJ2/ ZBVdqGmThawLAwS1Ezl+JI77ZfuhOjJSxMIgYK9D9Xi6yhbLv64nfeYP6dRoYIQfjZ EOlIniSkzh5xviILH267GSdVrs3y4Ms3Y0CW83bedu9P8V1+TLpY80Oho+uDrdCglR WTmx4Ku2bnpMXO4ruxFF6EQhVnktB28K66mImt2U3ZOPFQNqlALP2a+PPb1i8xYZQM IHIgAgAY8MmWQ== Received: from php-smtp4.php.net (localhost [127.0.0.1]) by php-smtp4.php.net (Postfix) with ESMTP id 2A89818005B for ; Sat, 17 Aug 2024 12:14:32 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.0 (2022-12-13) on php-smtp4.php.net X-Spam-Level: X-Spam-Status: No, score=-0.1 required=5.0 tests=BAYES_50,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,DMARC_MISSING,RCVD_IN_DNSWL_LOW, SPF_HELO_PASS,SPF_PASS autolearn=no autolearn_force=no version=4.0.0 X-Spam-Virus: No X-Envelope-From: Received: from fhigh3-smtp.messagingengine.com (fhigh3-smtp.messagingengine.com [103.168.172.154]) (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 ; Sat, 17 Aug 2024 12:14:31 +0000 (UTC) Received: from phl-compute-08.internal (phl-compute-08.nyi.internal [10.202.2.48]) by mailfhigh.nyi.internal (Postfix) with ESMTP id 31F91114BFF4 for ; Sat, 17 Aug 2024 08:12:43 -0400 (EDT) Received: from phl-mailfrontend-01 ([10.202.2.162]) by phl-compute-08.internal (MEProxy); Sat, 17 Aug 2024 08:12:43 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rwec.co.uk; h=cc :content-transfer-encoding:content-type:content-type:date:date :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to; s=fm3; t=1723896763; x=1723983163; bh=KwUFgoYCVLhoRpvFWWfa5NxxuGQQwiYLImGThfjgRfs=; b= rTdAsdT2yud8JbLJCKWmlqK/+nCT4cUtR5pF001laNbmMldMHim1gojOGEbRuFKm 5b+kGm3DaQo00BK1QV2288paWUDGJwrsFGN0St6RjxGflEez7HyzdhqCtcNvnSwI jqJfnFDoCEBll0O7b6s0Ji03Cdduef6N+nLuSy43/OtVhnlPXFybjNjz7WnJFaIN FRiF/t2UzVybtsRTDC9l3OU0ukivHEV5i4r9vGifQ4f2/I4vW1WUCM7IlDG2UT3d F+Lcrtph22/NVO8eOfd3Td2c29BGw+vw+9gzDOB9+00Jk0FzGkUslkDYE+DLbaVt NvzPwSodp3ZQ1fbg6NIihA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:content-type :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1723896763; x= 1723983163; bh=KwUFgoYCVLhoRpvFWWfa5NxxuGQQwiYLImGThfjgRfs=; b=E 9/X6VyMpkrr3bDCprwrOi6EQBLTKhtPqlLTUNFWVBF6bO3b5UU145W1hHhqF93FE dqADrjD/S+S0NNJ+94E8J1jP9A7tAw1quGPA/DcJ9lJCl4E4Y7AhYbsEKfTUkUdi GyZlp/y1HICrxN2KZNrbjpTCClF7HMOLrj+HbQauX5BKAltSqeopwca0Yw3qtHgU 5ovTDtjLK8rj/qmgKAfTQ0WDkkJL/OvYS5Bmef7hqzZ4QrURfHOb+c0VkuJz+Bol RxwUB5qhB7YaaW7kcT4idHUQw7ipr/+kxemeoRO02Uf7rYdbKRA9pzc5XcsxFvp1 xoNMCgCC6oUB7YE9YkSmQ== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeftddruddutddggeelucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggvpdfu rfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucenucfjughrpeffhffvuf gfjghfkfggtgfgsehtqhhmtddtreejnecuhfhrohhmpedftfhofigrnhcuvfhomhhmihhn shculgfkoffuohfrngdfuceoihhmshhophdrphhhphesrhifvggtrdgtohdruhhkqeenuc ggtffrrghtthgvrhhnpeehleffteeigfevudetfedugedtudevledugeeugeelheeihfeh gfdtkeevvefgleenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfh hrohhmpehimhhsohhprdhphhhpsehrfigvtgdrtghordhukhdpnhgspghrtghpthhtohep uddpmhhouggvpehsmhhtphhouhhtpdhrtghpthhtohepihhnthgvrhhnrghlsheslhhish htshdrphhhphdrnhgvth X-ME-Proxy: Feedback-ID: id5114917:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA for ; Sat, 17 Aug 2024 08:12:42 -0400 (EDT) Date: Sat, 17 Aug 2024 13:12:40 +0100 To: internals@lists.php.net Subject: Re: [PHP-DEV] String enums & __toString() User-Agent: K-9 Mail for Android In-Reply-To: <82BB4B15-F799-4E11-8A0F-CF5E5C995F82@getmailspring.com> References: <82BB4B15-F799-4E11-8A0F-CF5E5C995F82@getmailspring.com> Message-ID: <7082DD61-A257-4B3D-A49E-9CB32A560CDA@rwec.co.uk> Precedence: bulk list-help: list-post: List-Id: internals.lists.php.net x-ms-reactions: disallow MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable From: imsop.php@rwec.co.uk ("Rowan Tommins [IMSoP]") On 17 August 2024 01:47:20 BST, John Coggeshall wr= ote: > What's the point of a Stringable interface if we can't actually implemen= t __toString() for it?=20 Just to show the range of viewpoints on this, I'd like to mention my opini= on that Stringable is a horrible feature, with an implementation that's com= pletely inconsistent with the rest of the language, and no clear semantic p= urpose=2E If your contract is "the input must be usable as a string", then = the obvious type to require is "string"=2E I'm not saying my opinion is objectively right, or even held by a majority= , I just wanted to provide a counterbalance of sorts=2E >function fooThatWantsString(string|Stringable|UnitEnum $bar) >{ >if(($bar instanceof UnitEnum) && !is_string($bar->value)) { >throw InvalidArgumentException('This is exactly the sort of thing we are = trying to get rid of with type hinting'); >} else { >$bar =3D $bar->value; >} > >$bar =3D (string)$bar; >} I would have thought the more common use case would be the opposite: you w= ant the function to be limited to a particular enum, but allow strings for = backward compatibility, and have this:=20 function fooThatTakesAnOption(FooOptionEnum|string $opt) { if ( is_string($opt) ) { $opt =3D FooOptionEnum::from($opt); } =2E=2E=2E } You might later want to use $opt->value, or $opt->getApiRepresentation(), = or whatever else; but at that point you know you have an object of a partic= ular type=2E Regards, Rowan Tommins [IMSoP]