Skip to content

Implement Stringable interface on Enum #160

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Aug 4, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,10 @@
"autoload": {
"psr-4": {
"MyCLabs\\Enum\\": "src/"
}
},
"classmap": [
"stubs/Stringable.php"
]
},
"autoload-dev": {
"psr-4": {
Expand Down
2 changes: 1 addition & 1 deletion src/Enum.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
* @psalm-immutable
* @psalm-consistent-constructor
*/
abstract class Enum implements \JsonSerializable
abstract class Enum implements \JsonSerializable, \Stringable
{
/**
* Enum value
Expand Down
11 changes: 11 additions & 0 deletions stubs/Stringable.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?php

if (\PHP_VERSION_ID < 80000 && !interface_exists('Stringable')) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

symfony/polyfill-php80 has no if condition there: https://github.com/symfony/polyfill-php80/blob/main/Resources/stubs/Stringable.php
Is there a way to control what would composer use in the classmap for this interface as a file? I guess it should be only 1 file and it doesn't matter which one of them will get here if both would be available.
Do you see a issue where symfony might be included after this one and having no if condition it would fail?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh good point 🤔

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It doesn't matter which one is used as both polyfill "emulate" the same interface.

The classmap autoloads will result in an associative array which associate a class with a file which implement this one.
From the Composer autoload view, only one file will be loaded.

interface Stringable
{
/**
* @return string
*/
public function __toString();
}
}