On Tue, Feb 11, 2020 at 9:57 AM Nicolas Grekas <nicolas.grekas+...@gmail.com> wrote:
> Le lun. 27 janv. 2020 à 10:19, Nikita Popov <nikita....@gmail.com> a > écrit : > > > On Wed, Jan 22, 2020 at 4:47 PM Nicolas Grekas < > > nicolas.grekas+...@gmail.com> wrote: > > > >> Hello everyone, > >> > >> as announced last week, I'm officially opening a discussion for adding a > >> "Stringable" interface to PHP 8. > >> > >> The RFC and its rationale are presented here as required: > >> https://wiki.php.net/rfc/stringable > >> > >> The patch is found on GitHub, where some discussions happened already, > you > >> might be interested in having a look: > >> https://github.com/php/php-src/pull/5083 > >> > >> TL;DR, I think we need an interface to allow passing objects with a > >> __toString() method in a type-safe way, using the string|Stringable > type. > >> Here is the stub of the proposal: > >> interface Stringable { public function __toString(): string; } > >> > >> I invite everyone to review the RFC before commenting here as I tried to > >> sum up considerations that some already had before and that you might > have > >> too. > >> > >> Cheers, > >> Nicolas > >> > > > > I'm wondering whether it could make sense to automatically implement this > > interface for all classes that define __toString(). Explicitly > implementing > > the interface is useful for the transition period (where old PHP versions > > also need to be supported), but when considering only PHP 8 support, I > > think it may make sense to implicitly implement the interface. If the > > __toString() functionality also works fine without implementing the > > interface, and there's probably only going to be relatively few consumers > > of the Stringable type, it will likely be quite common that the interface > > will not get implemented... > > > > > This proposal has been implemented by Nikita himself on the linked PR, see > 2nd commit: > https://github.com/php/php-src/pull/5083 > > I updated the RFC accordingly: > https://wiki.php.net/rfc/stringable > > I think the RFC is ready for entering the voting stage. > Any other comments before? > Just so someone has mentioned it... is "Stringable" really the best name for this interface? Reddit really didn't like it ;) Some possible alternatives: ToString, HasToString, CastsToString. Something to keep in mind is that there has been a recent proposal for "Arrayable" as well, and that had very different semantics (not about __toArray() at all). Regards, Nikita