提交的内容
This commit is contained in:
0
vendor/myclabs/php-enum/LICENSE
vendored
Executable file → Normal file
0
vendor/myclabs/php-enum/LICENSE
vendored
Executable file → Normal file
64
vendor/myclabs/php-enum/README.md
vendored
Executable file → Normal file
64
vendor/myclabs/php-enum/README.md
vendored
Executable file → Normal file
@ -1,9 +1,9 @@
|
||||
# PHP Enum implementation inspired from SplEnum
|
||||
|
||||
[](https://travis-ci.org/myclabs/php-enum)
|
||||
[![GitHub Actions][GA Image]][GA Link]
|
||||
[](https://packagist.org/packages/myclabs/php-enum)
|
||||
[](https://packagist.org/packages/myclabs/php-enum)
|
||||
[](https://shepherd.dev/github/myclabs/php-enum)
|
||||
[![Psalm Shepherd][Shepherd Image]][Shepherd Link]
|
||||
|
||||
Maintenance for this project is [supported via Tidelift](https://tidelift.com/subscription/pkg/packagist-myclabs-php-enum?utm_source=packagist-myclabs-php-enum&utm_medium=referral&utm_campaign=readme).
|
||||
|
||||
@ -34,6 +34,8 @@ use MyCLabs\Enum\Enum;
|
||||
|
||||
/**
|
||||
* Action enum
|
||||
*
|
||||
* @extends Enum<Action::*>
|
||||
*/
|
||||
final class Action extends Enum
|
||||
{
|
||||
@ -130,9 +132,65 @@ final class Action extends Enum
|
||||
}
|
||||
```
|
||||
|
||||
## Native enums and migration
|
||||
Native enum arrived to PHP in version 8.1: https://www.php.net/enumerations
|
||||
If your project is running PHP 8.1+ or your library has it as a minimum requirement you should use it instead of this library.
|
||||
|
||||
When migrating from `myclabs/php-enum`, the effort should be small if the usage was in the recommended way:
|
||||
- private constants
|
||||
- final classes
|
||||
- no method overridden
|
||||
|
||||
Changes for migration:
|
||||
- Class definition should be changed from
|
||||
```php
|
||||
/**
|
||||
* @method static Action VIEW()
|
||||
* @method static Action EDIT()
|
||||
*/
|
||||
final class Action extends Enum
|
||||
{
|
||||
private const VIEW = 'view';
|
||||
private const EDIT = 'edit';
|
||||
}
|
||||
```
|
||||
to
|
||||
```php
|
||||
enum Action: string
|
||||
{
|
||||
case VIEW = 'view';
|
||||
case EDIT = 'edit';
|
||||
}
|
||||
```
|
||||
All places where the class was used as a type will continue to work.
|
||||
|
||||
Usages and the change needed:
|
||||
|
||||
| Operation | myclabs/php-enum | native enum |
|
||||
|----------------------------------------------------------------|----------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| Obtain an instance will change from | `$enumCase = Action::VIEW()` | `$enumCase = Action::VIEW` |
|
||||
| Create an enum from a backed value | `$enumCase = new Action('view')` | `$enumCase = Action::from('view')` |
|
||||
| Get the backed value of the enum instance | `$enumCase->getValue()` | `$enumCase->value` |
|
||||
| Compare two enum instances | `$enumCase1 == $enumCase2` <br/> or <br/> `$enumCase1->equals($enumCase2)` | `$enumCase1 === $enumCase2` |
|
||||
| Get the key/name of the enum instance | `$enumCase->getKey()` | `$enumCase->name` |
|
||||
| Get a list of all the possible instances of the enum | `Action::values()` | `Action::cases()` |
|
||||
| Get a map of possible instances of the enum mapped by name | `Action::values()` | `array_combine(array_map(fn($case) => $case->name, Action::cases()), Action::cases())` <br/> or <br/> `(new ReflectionEnum(Action::class))->getConstants()` |
|
||||
| Get a list of all possible names of the enum | `Action::keys()` | `array_map(fn($case) => $case->name, Action::cases())` |
|
||||
| Get a list of all possible backed values of the enum | `Action::toArray()` | `array_map(fn($case) => $case->value, Action::cases())` |
|
||||
| Get a map of possible backed values of the enum mapped by name | `Action::toArray()` | `array_combine(array_map(fn($case) => $case->name, Action::cases()), array_map(fn($case) => $case->value, Action::cases()))` <br/> or <br/> `array_map(fn($case) => $case->value, (new ReflectionEnum(Action::class))->getConstants()))` |
|
||||
|
||||
## Related projects
|
||||
|
||||
- [PHP 8.1+ native enum](https://www.php.net/enumerations)
|
||||
- [Doctrine enum mapping](https://github.com/acelaya/doctrine-enum-type)
|
||||
- [Symfony ParamConverter integration](https://github.com/Ex3v/MyCLabsEnumParamConverter)
|
||||
- [PHPStan integration](https://github.com/timeweb/phpstan-enum)
|
||||
- [Yii2 enum mapping](https://github.com/KartaviK/yii2-enum)
|
||||
|
||||
|
||||
[GA Image]: https://github.com/myclabs/php-enum/workflows/CI/badge.svg
|
||||
|
||||
[GA Link]: https://github.com/myclabs/php-enum/actions?query=workflow%3A%22CI%22+branch%3Amaster
|
||||
|
||||
[Shepherd Image]: https://shepherd.dev/github/myclabs/php-enum/coverage.svg
|
||||
|
||||
[Shepherd Link]: https://shepherd.dev/github/myclabs/php-enum
|
||||
|
||||
0
vendor/myclabs/php-enum/SECURITY.md
vendored
Executable file → Normal file
0
vendor/myclabs/php-enum/SECURITY.md
vendored
Executable file → Normal file
9
vendor/myclabs/php-enum/composer.json
vendored
Executable file → Normal file
9
vendor/myclabs/php-enum/composer.json
vendored
Executable file → Normal file
@ -3,7 +3,7 @@
|
||||
"type": "library",
|
||||
"description": "PHP Enum implementation",
|
||||
"keywords": ["enum"],
|
||||
"homepage": "http://github.com/myclabs/php-enum",
|
||||
"homepage": "https://github.com/myclabs/php-enum",
|
||||
"license": "MIT",
|
||||
"authors": [
|
||||
{
|
||||
@ -14,7 +14,10 @@
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"MyCLabs\\Enum\\": "src/"
|
||||
}
|
||||
},
|
||||
"classmap": [
|
||||
"stubs/Stringable.php"
|
||||
]
|
||||
},
|
||||
"autoload-dev": {
|
||||
"psr-4": {
|
||||
@ -28,6 +31,6 @@
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^9.5",
|
||||
"squizlabs/php_codesniffer": "1.*",
|
||||
"vimeo/psalm": "^4.6.2"
|
||||
"vimeo/psalm": "^4.6.2 || ^5.2"
|
||||
}
|
||||
}
|
||||
|
||||
35
vendor/myclabs/php-enum/psalm.xml
vendored
35
vendor/myclabs/php-enum/psalm.xml
vendored
@ -1,35 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<psalm
|
||||
totallyTyped="true"
|
||||
resolveFromConfigFile="true"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns="https://getpsalm.org/schema/config"
|
||||
xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd"
|
||||
>
|
||||
<projectFiles>
|
||||
<directory name="src" />
|
||||
<directory name="static-analysis" />
|
||||
<ignoreFiles>
|
||||
<directory name="vendor" />
|
||||
<directory name="src/PHPUnit" />
|
||||
</ignoreFiles>
|
||||
</projectFiles>
|
||||
|
||||
<issueHandlers>
|
||||
<MixedAssignment errorLevel="info" />
|
||||
|
||||
<ImpureStaticProperty>
|
||||
<!-- self::$... usages in Enum are used to populate an internal cache, and cause no side-effects -->
|
||||
<errorLevel type="suppress">
|
||||
<file name="src/Enum.php"/>
|
||||
</errorLevel>
|
||||
</ImpureStaticProperty>
|
||||
|
||||
<ImpureVariable>
|
||||
<!-- $this usages in Enum point themselves to an immutable instance -->
|
||||
<errorLevel type="suppress">
|
||||
<file name="src/Enum.php"/>
|
||||
</errorLevel>
|
||||
</ImpureVariable>
|
||||
</issueHandlers>
|
||||
</psalm>
|
||||
5
vendor/myclabs/php-enum/src/Enum.php
vendored
Executable file → Normal file
5
vendor/myclabs/php-enum/src/Enum.php
vendored
Executable file → Normal file
@ -19,7 +19,7 @@ namespace MyCLabs\Enum;
|
||||
* @psalm-immutable
|
||||
* @psalm-consistent-constructor
|
||||
*/
|
||||
abstract class Enum implements \JsonSerializable
|
||||
abstract class Enum implements \JsonSerializable, \Stringable
|
||||
{
|
||||
/**
|
||||
* Enum value
|
||||
@ -176,6 +176,7 @@ abstract class Enum implements \JsonSerializable
|
||||
|
||||
/** @psalm-var T $value */
|
||||
foreach (static::toArray() as $key => $value) {
|
||||
/** @psalm-suppress UnsafeGenericInstantiation */
|
||||
$values[$key] = new static($value);
|
||||
}
|
||||
|
||||
@ -297,6 +298,7 @@ abstract class Enum implements \JsonSerializable
|
||||
$message = "No static method or enum constant '$name' in class " . static::class;
|
||||
throw new \BadMethodCallException($message);
|
||||
}
|
||||
/** @psalm-suppress UnsafeGenericInstantiation */
|
||||
return self::$instances[$class][$name] = new static($array[$name]);
|
||||
}
|
||||
return clone self::$instances[$class][$name];
|
||||
@ -308,7 +310,6 @@ abstract class Enum implements \JsonSerializable
|
||||
*
|
||||
* @return mixed
|
||||
* @link http://php.net/manual/en/jsonserializable.jsonserialize.php
|
||||
* @psalm-pure
|
||||
*/
|
||||
#[\ReturnTypeWillChange]
|
||||
public function jsonSerialize()
|
||||
|
||||
2
vendor/myclabs/php-enum/src/PHPUnit/Comparator.php
vendored
Executable file → Normal file
2
vendor/myclabs/php-enum/src/PHPUnit/Comparator.php
vendored
Executable file → Normal file
@ -43,7 +43,7 @@ final class Comparator extends \SebastianBergmann\Comparator\Comparator
|
||||
);
|
||||
}
|
||||
|
||||
private function formatEnum(Enum $enum = null)
|
||||
private function formatEnum(?Enum $enum = null)
|
||||
{
|
||||
if ($enum === null) {
|
||||
return "null";
|
||||
|
||||
11
vendor/myclabs/php-enum/stubs/Stringable.php
vendored
Normal file
11
vendor/myclabs/php-enum/stubs/Stringable.php
vendored
Normal file
@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
if (\PHP_VERSION_ID < 80000 && !interface_exists('Stringable')) {
|
||||
interface Stringable
|
||||
{
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function __toString();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user