intraworlds / enum
Lightweight implementation of enum value object
Installs: 71 615
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 2
Forks: 1
Open Issues: 0
Requires
- php: >=8.0
Requires (Dev)
- doctrine/coding-standard: ^9.0
- phpstan/phpstan: ^1.4
- phpunit/phpunit: ^9.5
README
Lightweight implementation of enum value object in PHP.
Installation
Use Composer to install the package:
composer require intraworlds/enum
Usage
Extend IW\Enum
and add arbitrary constants which becomes your enum keys.
final class Hash extends Enum { const MD5 = 'md5'; const SHA1 = 'sha1'; }
Obtain instance of enum value by calling static function <classname>::<key>()
.
$md5 = Hash::MD5();
Main advantage of use this library is of cource type hinting. Therefore given instance is always valid in principle of DDD value object.
function crack(Hash $hash) { echo 'cracking ... ' . $hash; // notice that enum is implementing __toString() method } crack(Hash::SHA1()); // cracking ... sha1 crack(Hash::SHA1); // throws TypeError
The function is returning a singleton so you can compare it with ===
var_dump($md5 === MD5()); // true var_dump($md5 === SHA1()); // false
Actually you must use ===
for strict comparison. With ==
loose comparison PHP compares only that objects are the same class.
var_dump($md5 == MD5()); // true var_dump($md5 == SHA1()); // true - DON'T use == comparison!
Access actual value with method getValue()
var_dump($md5->getValue() === Hash::MD5); // true
Switch statements must be defined by values because of loose comparison.
switch ($hash->getValue()) { case Hash::MD5: ... case Hash::SHA1: ... }
You can user method search()
for obtaining instance of enum by a value.
$contentType = ContentTypeEnum::search(apache_request_headers()['Content-Type']);
PHPStan integration
This library is distributed with PHPStan extension which's providing magic methods reflection. Just add following configuration to your phpstan.neon
services: - class: IW\PHPStan\Reflection\EnumMethodsReflectionExtension tags: - phpstan.broker.methodsClassReflectionExtension
Alternatives
- we took most of the inspiration from library myclabs/php-enum. It's nice implementation but it's missing singletons and it's not optimized for PHP7.
- PHP's SplEnum needs an extension and also does not support singletons.
License
All contents of this package are licensed under the MIT license.