Compare commits

...

4 commits

Author SHA1 Message Date
ba3f43a9e2 fix: use global namespace for ValueError (#5)
Fixes exception:
```
Error: Class "vlw\ValueError" not found
```

Reviewed-on: https://codeberg.org/vlw/php-xenum/pulls/5
2025-05-10 11:28:03 +00:00
vlw
1c997a5574 chore: package namespace change (#4)
Reviewed-on: https://codeberg.org/vlw/php-xenum/pulls/4
Co-authored-by: vlw <victor@vlw.se>
Co-committed-by: vlw <victor@vlw.se>
2024-12-02 10:36:32 +00:00
8972f06f42
fix(doc): correct Enum names in README 2023-11-20 11:10:39 +01:00
99b784841e
feat: add entries() method (#3)
* feat: add entries() method

* feat(doc): add Enum::entries() to README
2023-10-09 13:32:07 +02:00
4 changed files with 56 additions and 27 deletions

1
.gitignore vendored
View file

@ -5,6 +5,7 @@
/public/storage /public/storage
/storage/*.key /storage/*.key
/vendor /vendor
bin
.env .env
.env.backup .env.backup
.phpunit.result.cache .phpunit.result.cache

View file

@ -7,7 +7,7 @@ This library adds a few useful traits to your PHP Enums that compliment existing
For example, For example,
```php ```php
use \victorwesterlund\xEnum; use vlw\xEnum;
enum HelloWorld: string { enum HelloWorld: string {
use xEnum; use xEnum;
@ -22,6 +22,28 @@ HelloWorld::fromName("FOO"); // HelloWorld::FOO
HelloWorld::tryFromName("MOM"); // null HelloWorld::tryFromName("MOM"); // null
``` ```
# How to use
Requires PHP 8.0 or newer
1. **Install from composer**
```
composer require vlw/xenum
```
2. **`use` in your project**
```php
use vlw\xEnum;
```
3. **`use` with your Enums**
```php
enum HelloWorld {
use xEnum;
}
```
# Methods # Methods
All methods implemented by this library All methods implemented by this library
@ -32,6 +54,7 @@ Method
[Enum::tryFromName(int\|string\|null): static\|null](#enumtryfromname) [Enum::tryFromName(int\|string\|null): static\|null](#enumtryfromname)
[Enum::names(): array](#enumnames) [Enum::names(): array](#enumnames)
[Enum::values(): array](#enumvalues) [Enum::values(): array](#enumvalues)
[Enum::entries(): array](#enumentries)
## Enum::fromName() ## Enum::fromName()
@ -53,7 +76,7 @@ enum HelloWorld: string {
case BAZ = "QUX"; case BAZ = "QUX";
} }
HelloWorld::fromName("BAR"); // HelloWorld::FOO HelloWorld::fromName("FOO"); // HelloWorld::FOO
HelloWorld::fromName("MOM") // ValueError: 'MOM' is not a valid case for HelloWorld HelloWorld::fromName("MOM") // ValueError: 'MOM' is not a valid case for HelloWorld
``` ```
@ -77,7 +100,7 @@ enum HelloWorld: string {
case BAZ = "QUX"; case BAZ = "QUX";
} }
HelloWorld::tryFromName("BAR"); // HelloWorld::FOO HelloWorld::tryFromName("FOO"); // HelloWorld::FOO
HelloWorld::tryFromName("MOM") // null HelloWorld::tryFromName("MOM") // null
``` ```
@ -107,7 +130,7 @@ HelloWorld::names(); // ["FOO", "BAZ"]
Return sequential array of Enum case values Return sequential array of Enum case values
```php ```php
Enum::values(): array Enum::entries(): array
``` ```
Example: Example:
@ -123,23 +146,23 @@ enum HelloWorld: string {
HelloWorld::values(); // ["BAR", "QUX"] HelloWorld::values(); // ["BAR", "QUX"]
``` ```
# How to use ## Enum::entries()
Requires PHP 8.0 or newer Return an associative array of Enum names and values. This method is similar to [JavaScript's Object.entries()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries)
1. **Install from composer** ```php
``` Enum::entries(): array
composer require victorwesterlund/xenum ```
```
2. **`use` in your project** Example:
```php
use \victorwesterlund\xEnum;
```
3. **`use` with your Enums** ```php
```php enum HelloWorld: string {
enum HelloWorld {
use xEnum; use xEnum;
}
``` case FOO = "BAR";
case BAZ = "QUX";
}
HelloWorld::entries(); // ["FOO" => "BAR", "BAZ" => "QUX"]
```

View file

@ -1,18 +1,18 @@
{ {
"name": "victorwesterlund/xenum", "name": "vlw/xenum",
"description": "PHP eXtended Enums. The missing quality-of-life features from PHP 8+ Enums", "description": "PHP eXtended Enums. The missing quality-of-life features from PHP 8+ Enums",
"type": "library", "type": "library",
"license": "GPL-3.0-only", "license": "GPL-3.0-only",
"authors": [ "authors": [
{ {
"name": "Victor Westerlund", "name": "Victor Westerlund",
"email": "victor.vesterlund@gmail.com" "email": "victor@vlw.se"
} }
], ],
"minimum-stability": "dev", "minimum-stability": "dev",
"autoload": { "autoload": {
"psr-4": { "psr-4": {
"victorwesterlund\\": "src/" "vlw\\": "src/"
} }
}, },
"require": {} "require": {}

View file

@ -1,11 +1,11 @@
<?php <?php
namespace victorwesterlund; namespace vlw;
/* /*
PHP eXtended Enums. PHP eXtended Enums.
The missing quality-of-life features from PHP 8+ Enums. The missing quality-of-life features from PHP 8+ Enums.
https://github.com/victorwesterlund/php-xenum https://codeberg.org/vlw/php-xenum
*/ */
trait xEnum { trait xEnum {
// Resolve enum case from enum name or return null // Resolve enum case from enum name or return null
@ -23,7 +23,7 @@
// Throw a ValueError if Enum name is not found // Throw a ValueError if Enum name is not found
public static function fromName(?string $name): static { public static function fromName(?string $name): static {
$case = self::tryFromName($name); $case = self::tryFromName($name);
return $case ? $case : throw new ValueError("'{$name}' is not a valid case for enum " . self::class); return $case ? $case : throw new \ValueError("'{$name}' is not a valid case for enum " . self::class);
} }
// Return array of enum names // Return array of enum names
@ -35,4 +35,9 @@
public static function values(): array { public static function values(): array {
return array_column(self::cases(), "value"); return array_column(self::cases(), "value");
} }
// Return assoc array of enum names and values
public static function entries(): array {
return array_combine(self::names(), self::values());
}
} }