Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:126522 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 6B19E1A00BC for ; Fri, 28 Feb 2025 08:33:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=php.net; s=mail; t=1740731437; bh=JOXUMgJNrTr2+G+mG9tAcOMzdkNg48OmICgBy1IlwIA=; h=From:Date:Subject:To:From; b=UBdm2qRwiIQk4rYswwqzQdQbLIgXh+g6OPZhLyFtohCY5tLfhfoxaZvA1YTppzjbr 4ltnQcGiBmetu0yZtRGK83DMXKnUCVwSdIXW4lZoUd/1ADvQwJXBc0Zja5zgaTXJkd nf7LZGJvToboUNAyNGZeQqf9WP/4naLXIfNoqeXmp2qJMkZFyNuRNQFArIbLHuxYCh qleeZy6LpKb8Zj8vfy3khjOjwcxDhTeFreNlN/n71BfJtQHSfwuoNg/drs9N3s4Kga LsCBjmJSQ5C4op+m4FQjwT75DOISZNC4T+FOfLY7iLNNn4exHB9cyAT5cE5ov3IUJi 6A+u6j25dDcLQ== Received: from php-smtp4.php.net (localhost [127.0.0.1]) by php-smtp4.php.net (Postfix) with ESMTP id BE5381801DE for ; Fri, 28 Feb 2025 08:30:36 +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=-3.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,DMARC_PASS,FREEMAIL_FROM, HTML_MESSAGE,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE, SPF_PASS autolearn=no autolearn_force=no version=4.0.0 X-Spam-Virus: No X-Envelope-From: Received: from mail-il1-f181.google.com (mail-il1-f181.google.com [209.85.166.181]) (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 ; Fri, 28 Feb 2025 08:30:36 +0000 (UTC) Received: by mail-il1-f181.google.com with SMTP id e9e14a558f8ab-3cf880d90bdso6948615ab.3 for ; Fri, 28 Feb 2025 00:33:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740731593; x=1741336393; darn=lists.php.net; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=WEOv68rwK1YE+jVTMyg53DhFsbVYJqWofWay/yfDfKQ=; b=SNqWTOfOYQYLx24+rvA/cQlVVmvW7jrXJRYnUh/geUb+aj90+0iBnLmAHyMxkjme7b jxw9+96BUjplyBMX3p1z+085TVk8EZ5hmXTTPaYWzCW/MVcOu7imayFParKp+uy9Gjbq bdEMeGrVT8rQzjladIUyPjcoKfslnug/IpHH31GJF/3I/N4D+5RkgnO7D9d/DNy6hdNS aNsvsBcOyDCdagko5u91W+xqmXRB0WrFIRGxcI10TqyBi/1W+eyz5Le0sX76k39AEYNT 6sPacKc6TZKJNGqn4Ib75dnKv+Jf1o8tJUhEhcr8W0iBhz1f0PA/8IOOk6mqQqoBlWPg Y/5g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740731593; x=1741336393; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=WEOv68rwK1YE+jVTMyg53DhFsbVYJqWofWay/yfDfKQ=; b=oEuCXvQyJ5gSOxf7o0l6391Q1MPaVCq1ELAq/RG+XHXv8LZZl746RR8KlQ8BrRPJ33 KeGuJ3oJm/CcmTG6+a8fKm0vz1g+MKVsuDD+8j1AdYgCvHJ5w7EhwRUhVSgrTCmCmuwg +oZEathrfVSs+2PdFPsznGIw+iRsoLACbXbtHE+HRlc2p3KxTzdEjEDIplX8rv3yef2m SDoy4IzMJb8c+2Tyi6lODvlcLRe8Fs+h7zWL4FRcNSClJiS5ojPS5LDL/zbSK9183UZP vOGhppHdRUQ7u/3O6h/y15YFuM2BaWDAGfGuNJkHFPkdTQ8qABBECcnAjzumV9KdMsqr JilA== X-Gm-Message-State: AOJu0YwYFCu0WdVna88+oZbOOczkOEfLXxgs7jdzovQqSbvQtZAVYH7I BTeOwGKgDKXcDTHIUqdXyn5ZFe6QRlYt5385hDUiDSMjwZp29RK2sOJI2lGoxovYohWnrfLxd48 hgRWn979zOjmZhRCkgQA29r0cRQszRF15 X-Gm-Gg: ASbGncunZTJyCJS81TFsUjLhvXTgcOnre84kf2OA5ED4qqK6z44ZhlPAQmDhb3DavA3 lNyqpKQTwc5NjAmxca9CI0ILa67GIAJtFQ4X4YQ3d1jkkRDw/SFuLxrn/rLRh4c9ONOaVBlg6OH UulVxiAzH2 X-Google-Smtp-Source: AGHT+IFnBX0vVJtC42zs++XMltnTnLrmU7vWfCcB7s9p8KnhrgkWtzXs1pU3FLqckarrIBum/LzOLfu3dV0v0PDkeQQ= X-Received: by 2002:a05:6e02:214e:b0:3d3:e470:6d5 with SMTP id e9e14a558f8ab-3d3e6e70825mr21632335ab.13.1740731593254; Fri, 28 Feb 2025 00:33:13 -0800 (PST) Precedence: bulk list-help: list-post: List-Id: internals.lists.php.net x-ms-reactions: disallow MIME-Version: 1.0 Date: Fri, 28 Feb 2025 10:33:02 +0200 X-Gm-Features: AQ5f1JowwgdNh6peSo1qWG8zZSkNkzhYqI7pIXaC2v-cxTQqBLDzVDs9WUWSzhE Message-ID: Subject: [PHP-DEV] Enums should implement Stringable interface by default To: internals@lists.php.net Content-Type: multipart/alternative; boundary="00000000000043f13f062f2fa8ed" From: janis.kajaks@gmail.com (Janis Kajaks) --00000000000043f13f062f2fa8ed Content-Type: text/plain; charset="UTF-8" Hi, I'm writing this email with a reference to https://wiki.php.net/rfc/howto. My suggestion is that all enums (both basic/pure and backed) should implement Stringable interface by default, and before you say that it's totally wrong or impossible let me explain why. Let's say I have a backed enum: enum Suit: string { case Hearts = 'H'; case Diamonds = 'D'; case Clubs = 'C'; case Spades = 'S';} Now if I'm trying something like this "echo Suit::Hearts;"I will get an error "Fatal error: Uncaught Error: Object of class Suit could not be converted to string" BUT if I'm trying to use this enum as a part DTO (data transfer object) and then serialize it or do something as simple as "echo json_encode(Suit::Hearts);" then suddenly PHP knows how to convert enum to string. This feels so unfair to me that I finally decided to write this email. The same applies to basic enums which have only case names, but they are still stringable as $enum->name. Please give me the initial feedback to understand if it's worth proceeding with a RFC or not. Best regards, Janis Kajaks --00000000000043f13f062f2fa8ed Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi,
I'm writing this email with a refer= ence to https:= //wiki.php.net/rfc/howto.
My suggestion is that all enums (both basic/pure and backed) should=20 implement Stringable interface by default, and before you say that it's= =20 totally wrong or impossible let me explain why.
Let's say I h= ave a backed enum:
enum Suit: string {
  case Hearts =3D 'H';=

  case Diamonds =3D 'D';
  case Clubs =3D 'C';<=
/span>
  case Spades =3D 'S';=

}

Now if I'm trying something like this= =20 "echo Suit::Hearts;"I will get an error "Fatal error: Uncaug= ht Error:=20 Object of class Suit could not be converted to string"
BUT i= f=20 I'm trying to use this enum as a part DTO (data transfer object) and=20 then serialize it or do something as simple as "echo=20 json_encode(Suit::Hearts);" then suddenly PHP knows how to convert enu= m=20 to string. This feels so unfair to me that I finally decided to write=20 this email.
The same applies to basic enums which have only c= ase names, but they are still stringable as $enum->name.

<= /div>
Please give me the initial feedback to understand if it's wor= th proceeding with a RFC or not.


Be= st regards,
Janis Kajaks
--00000000000043f13f062f2fa8ed--