On 01/08/2021 16:59, Serhii Smirnov wrote:
class Features
{
    const FEATURE_FLAG_WITH_SOME_LONG_NAME = 'feature_flag_with_some_long_name';     const FEATURE_SOME_ANOTHER_COOL_FEATURE = 'feature_some_another_cool_feature';
}


That looks like it falls into my first category: the actual value of the constant doesn't matter, you just need to be able to compare against it later.

That makes it a perfect use case for PHP 8.1's new "enum" type, where you'll be able to declare this:

enum Feature
{
     case FEATURE_FLAG_WITH_SOME_LONG_NAME;
     case FEATURE_SOME_ANOTHER_COOL_FEATURE;
}

You can then even define the "isEnabled" function so that it only accepts Feature values, not strings (i.e. "public function isEnabled(Feature $feature): bool { ... }" instead of "public function isEnabled(string $feature): bool { ... }").

If you're not familiar with the new enums, the best documentation at the moment is probably the RFC which proposed them: https://wiki.php.net/rfc/enumerations

I'm really looking forward to using them :)


Regards,

--
Rowan Tommins
[IMSoP]

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: https://www.php.net/unsub.php

Reply via email to