Wakeapp / 枚举包
此包已被废弃,不再维护。未建议替代包。
提供无需在运行时使用反射即可与ENUM交互的可能性
v1.2.1
2021-03-02 15:59 UTC
Requires
- php: ~7.1||~8.0
- symfony/config: ~3.4||~4.0||~5.0
- symfony/dependency-injection: ~3.4||~4.0||~5.0
- symfony/finder: ~3.4||~4.0||~5.0
- symfony/http-kernel: ~3.4||~4.0||~5.0
- wakeapp/enumer: ^1.0
This package is auto-updated.
Last update: 2021-11-30 17:46:46 UTC
README
简介
该包提供将任何具有常量的类用作ENUM
的能力。
其主要特点是避免在执行期间使用反射。这种优化是通过在容器编译阶段收集所有关于类常量的数据来实现的。
安装
步骤 1: 加载包
打开控制台,切换到项目目录,然后运行以下命令以加载此包的稳定版本
composer require wakeapp/enumer-bundle
此命令假定Composer已安装并全局可用。
步骤 2: 引入包
然后,通过将其添加到项目中的app/AppKernel.php
文件中的注册包列表来启用包
<?php declare(strict_types=1); // app/AppKernel.php class AppKernel extends Kernel { // ... public function registerBundles() { $bundles = [ // ... new Wakeapp\Bundle\EnumerBundle\WakeappEnumerBundle(), ]; return $bundles; } // ... }
配置
为了开始使用包,不需要预先配置,默认设置如下
wakeapp_enumer: # список директорий, в которых будет происходить поиск классов, реализующих EnumInterface source_directories: - 'src' # список классов, которые следует зарегистрировать вне зависимости от реализации EnumInterface source_classes: ~
使用
要注册一个包含常量值的类并将其用作enum
,需要添加EnumInterface的实现。
<?php declare(strict_types=1); namespace Acme\Enum; use Wakeapp\Bundle\EnumerBundle\Enum\EnumInterface; class GenderEnum implements EnumInterface { const MALE = 'Male'; const FEMALE = 'Female'; }
所有实现EnumInterface的类都可通过服务wakeapp_enumer.enum_registry
进行操作(通过autowire
调用也可访问)。
<?php declare(strict_types=1); namespace Example; use Acme\Enum\GenderEnum; use Symfony\Component\DependencyInjection\Container; /** @var Container $container */ $enumerRegistry = $container->get('wakeapp_enumer.enum_registry'); $list = $enumerRegistry->getOriginalList(GenderEnum::class); echo json_encode($list);// {"MALE":"Male","FEMALE":"Female"} $listCombine = $enumerRegistry->getCombinedList(GenderEnum::class); echo json_encode($listCombine); // {"Male":"Male","Female":"Female"} $normalizedList = $enumerRegistry->getNormalizedList(GenderEnum::class); echo json_encode($normalizedList); // {"male":"Male","female":"Female"} $originalValue = $enumerRegistry->getOriginalValue(GenderEnum::class, 'FemALE'); echo $originalValue; // 'Female'
附加信息
手动注册常量类
假设我们有一个包含常量的vendor类,我们需要注册它。
<?php declare(strict_types=1); namespace Vendor\Acme\Enum; class VendorGenderEnum { const MALE = 'Male'; const FEMALE = 'Female'; }
要注册此类,需要将其添加到source_classes
数组中。
wakeapp_enumer: source_classes: - Vendor\Acme\Enum\VendorGenderEnum