从动态名称获取 PHP 枚举

2024-02-20

我正在尝试从动态名称创建 php 8.1 枚举。看来不可能。所以给定一个枚举

enum Foo {
    case bar;
}

当然还有以下作品:Foo::bar虽然这不会:

$name = "bar";
Foo::${$name}

这会导致: 访问未声明的静态属性 App\Console\Commands\Foo::$bar

我在这里尝试了各种技巧,但没有成功。似乎不可能从动态名称获取枚举实例。我的自定义和快速解决方法如下所示,一个静态工厂:

/**
 * @throws \Exception
 */
public static function fromName(string $name) : self {

    foreach(Foo::cases() as $enum){
        if($enum->name === $name){
            return $enum;
        }
    }
    throw new \Exception("Not a valid enum name");
}

我可以将其放入一个特征中,并在我的所有枚举中继承它,是的,问题解决了。

我的问题是:我在这里错过了什么吗?难道真的不能用本地 php 方法实例化枚举吗?还是我的思考方向错误?

php8.1 之前的 class-as-enum 编译器包曾经有这些方便的方法,请参阅https://github.com/bensampo/laravel-enum https://github.com/bensampo/laravel-enum那么为什么这种非常常见的情况没有成为规范的一部分(只是好奇)?


最简单的方法是使用持续的() https://php.net/manual/en/function.constant.php功能:

<?php namespace App\Enums;


enum FooEnum: int
{
    case FOO = 123;
    case BAR = 456;
   
    public static function fromName(string $name){
        
        return constant("self::$name");
    }
}

Usage:


$name = "FOO";
dump(App\Enums\FooEnum::fromName($name));

/*
return 
App\Enums\FooEnum {
  +name: "FOO"
  +value: 123
}
*/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从动态名称获取 PHP 枚举 的相关文章

  • 使用 PHP 中的 GD 库在图像上绘图

    我创建了一个代码来生成随机图案图像 它创建一个具有给定宽度和高度的图像 并用 40x40 像素的小矩形填充它 这是我的代码
  • 通过身份验证保护 CodeIgniter 2 应用程序的正确方法是什么?

    I have Ion Auth http benedmunds com ion auth 正确安装并在我的服务器上运行 我也有默认的代码点火器2 新闻 教程在同一个 CI 安装中工作 我只是在玩 并对使用身份验证系统 封闭 或保护整个应用程
  • 禁用 WooCommerce 手动/编辑订单的电子邮件通知

    需要 WooCommerce 专业知识 我需要禁用手动创建的订单的电子邮件通知 我必须使用处理状态 由于处理订单状态的自定义挂钩 我无法创建自定义状态 理想情况下 手动订单页面中可以勾选一个复选框 勾选后 它将禁止在每种状态下向客户发送电子
  • Objective-C / C 给出枚举默认值

    我在某处读到过关于给枚举默认值的内容 如下所示 typedef enum MarketNavigationTypeNone 0 MarketNavigationTypeHeirachy 1 MarketNavigationTypeMarke
  • 如何将变量插入 PHP 数组?

    我在网上查了一些答案 但都不是很准确 我希望能够做到这一点 id result id info array id Example echo info 0 这有可能吗 您需要的是 不推荐 info array id Example varia
  • 正则表达式上的换行符

    我试图替换两个标签之间的所有内容 但我无法构建正确的表达式 这就是我所做的
  • Laravel Auth:attempt() 不会持久登录

    我在网上找到了许多有类似问题的资源 但似乎没有一个解决方案可以解决我的问题 当我使用以下代码登录用户时 一切看起来都很好 email Input get email password Input get password if Auth a
  • Ajax 没有将我重定向到下一页

    我正在尝试将单击的图像的 ID 传递到下一页 当我开发代码时 它没有将我重定向到下一页 当我单击 F12 并检查网络中的 POST 时 它显示变量已正确传递到下一页 如附图所示 但它没有将我重定向到下一页 所以现在我知道变量在下一页中正确传
  • 尝试使用 php 发送 POST 请求,无论我做什么,我都会收到“HTTP ERROR 500”

    为了发出 HTTP 请求 有人建议我尝试使用 PHP 并给了我一段代码 url https example com dashboard api data array to gt PHONE NUMBER from gt SENDER ID
  • 使用 ImageMagick 和 PHP 将 PNG 转换为 JPG 并将透明背景设置为白色

    将图像从 PNG 转换为 JPEG 时 如何使用 ImageMagick 带有 php 扩展 将透明背景设置为白色 在撰写本文时 您尚未指定正在使用哪个扩展 但如果您使用命令行 则命令将是 convert image png backgro
  • TypeScript 枚举到对象数组

    我有一个这样定义的枚举 export enum GoalProgressMeasurements Percentage 1 Numeric Target 2 Completed Tasks 3 Average Milestone Progr
  • 如何对 SQL 进行多次查询

    我正在尝试创建一个表 并在 PHP 脚本的帮助下在数据库中插入一些值 虽然只插入 1 行 但效果很好 当我尝试输入更多行数时 出现错误 我需要为每个查询编写完整的插入语句 因为我正在使用在线 Excel 到 SQL 查询转换器
  • 在我的 index.php 中加载 CSS 和 JS 等资源时出现错误 403

    我使用的是 Linux Elementary OS 并在 opt 中安装了 lampp My CSS and JS won t load When I inspect my page through browser The console
  • 使用 PHP PayPal REST API 退款?

    我正在开发一个集成到 PayPal 的 REST API 中的 PHP 应用程序 我正确处理了事务并将事务 ID 保存到 MySQL 数据库中 我现在正在尝试退款 但无法让它停止给出 传入 JSON 请求未映射到 API 请求 错误 有人对
  • 如何在HTML中的PHP中注释掉HTML和PHP?

    这是我想注释掉的一行代码 h1 class post title a href title a h1 一种流行的注释方法是分别注释 html 和 php 有一个更好的方法吗
  • 如何通过php获取网页的Open Graph协议?

    PHP 有一个简单的命令来获取网页的元标记 get meta tags 但这仅适用于具有名称属性的元标记 然而 开放图谱协议如今变得越来越流行 从网页获取 opg 值的最简单方法是什么 例如 我看到的基本方法是通过 cURL 获取页面并使用
  • Codeigniter - 出现 404 Not Found 错误

    我们在 godaddy 有两个托管套餐 我们的实时网站使用以下 htaccess 文件运行良好 无需在 url 中使用 index php 即可访问网站 RewriteEngine On RewriteCond REQUEST FILENA
  • 从字符串中获取数字

    我有一个字符串 例如 lorem 110 ipusm 我想获取 110 我已经尝试过这个 preg match all 0 9 string ret 但这正在返回 Array 0 gt 1 1 gt 1 2 gt 0 我想要这样的东西 Ar
  • 为什么拆箱枚举会产生奇怪的结果?

    考虑以下 Object box 5 int int int box int 5 int nullableInt box as int nullableInt 5 StringComparison enum StringComparison
  • 如果产品重量超过1000克,如何以公斤为单位显示

    在 Storefront 主题中 我使用下面的代码将格式化重量从 1000g 更改为 1kg add action woocommerce after shop loop item title show weight 10 function

随机推荐

  • 了解 gsl::narrow 实现

    The C 核心指南 https github com isocpp CppCoreGuidelines blob master CppCoreGuidelines md has a narrow如果强制转换更改了值 则会抛出异常 看着微软
  • SELECT * 中有时会缺少计算列

    在 SQL Azure 中 我有一个或多或少像这样设置的表 其中有两个计算列 IsExpired and IsDeadlineExpired 简单地将不可为 null 的日期时间列与当前时间进行比较 CREATE TABLE dbo Stu
  • 带有预定义关键字参数的define_method

    我想定义一个采用关键字参数的方法 我希望它在未提供关键字参数时引发 并且我可以自己编写代码 但理想情况下我想让 Ruby 为我做这件事 另外我希望能够使用检查新定义的方法Method parameters 如果我使用速记 double sp
  • 覆盖rails update_all方法

    我需要覆盖轨道 活动记录 update all方法 以便它始终更新updated at场也是如此 我应该如何实现这一目标 将以下代码放入文件中 config initializers update all with touch rb cla
  • 将用户定义的库添加到 SVN

    我正在开发一个项目 我使用了许多外部库 jar 格式 我已将下载的所有外部 jar 添加到版本控制 subversion 的构建路径中 然而 最近我注意到许多库并不在 SVN 树中 我对此进行了一些研究 这些是我作为用户定义的库创建的库 并
  • 在函数中使用全局变量

    如何在函数内创建或使用全局变量 如何在一个函数中在其他函数中使用定义的全局变量 Failing to use the global keyword where appropriate often causes UnboundLocalErr
  • PostgreSQL 自定义异常?

    在 Firebird 中我们可以像这样声明自定义异常 CREATE EXCEPTION EXP CUSTOM 0 异常 自定义异常 这些存储在数据库级别 在存储过程中 我们可以像这样引发异常 异常 EXP CUSTOM 0 PostgreS
  • Cakephp - HABTM 记录不会在唯一设置为 true 时删除

    CakePHP 的默认值 unique 设置为 true 我对其进行编码也是为了确保这一点 所以我有以下数据库结构 项目 HABTM 操作 将 unique 设置为 true 情况如下 当我删除 1 条或多条记录时 如果至少 1 条记录保持
  • 有没有办法从 Java Play 2 框架中的数据库生成代码?

    有谁知道如何在 Play Framework 2 0 中轻松地从数据库生成代码 我知道他们有一个模块 但似乎这是 1 X 版本的 Anyone CRUD 模块仅适用于 Play 1 2 x 在 Play 2 0 中不可用 它可能会在 Pla
  • C++ 中的 exit 和 std::exit 有什么区别?

    有什么区别exit and std exit在 C 中 我已经研究过但我找不到任何东西 这两个代码有什么区别 1 if SDL Init SDL INIT EVERYTHING 0 std cout lt lt Error Can t in
  • 实例变量何时初始化并赋值?

    实例变量什么时候初始化 是在构造函数块完成之后还是之前 考虑这个例子 public abstract class Parent public Parent System out println Parent Constructor init
  • 如何在cmd中显示每个进程的CPU使用率

    我想要一个 cmd windows 命令来显示所有进程以及每个进程的 cpu 百分比 有一个命令可以给我这个结果吗 你能帮我吗 谢谢 Try pslist http technet microsoft com en us sysintern
  • 访问回收站

    我想检查回收站中的文件 就像它是一个普通目录一样 特别是获取那里的文件列表以及每个文件到达回收站的日期 这段代码可以帮助你 Access the recycle bin folder Dim SH As New Shell32 Shell
  • Python 3.6 中的 f 字符串调试简写

    下列适用于 Python 3 8 https stackoverflow com questions 59661904 what does equal do in f strings inside the expression curly
  • 尝试删除最后一个元素时,带有子项的 SwiftUI (2.0) 列表崩溃

    我有以下带有子项的 SwiftUI 列表的代码 改编自另一个 StackOverflow 答案 SwiftUI 2 0 带有子项的列表 如何使披露按钮的可点击区域覆盖整个列表项 https stackoverflow com questio
  • 校准图像以获得位于同一平面上的点的顶视图

    校准 我已经使用 Matlab 中的视觉工具箱校准了相机 我使用棋盘图像来做到这一点 校准后我得到了cameraParams 其中包含 Camera Extrinsics RotationMatrices 3x3x18 double Tra
  • Angular 5 材质小吃栏仅针对自定义错误处理无法正确显示,否则工作正常

    Angular 5 材质 材质小吃栏仅针对自定义错误处理无法正确显示 否则工作正常 我试图使用材料小吃栏显示我的后端错误 问题是第一次被触发时 它出现在错误的位置 不是应有的底部中间 而是在左侧 并且它永远留在那里而不会消失 根据我的配置
  • 单击时弹出窗口中出现错误微调器

    我的应用程序如果有一个按钮 一个弹出窗口 有两个旋转器 那么我就可以在那里弹出窗口 但是当我单击旋转器时出现错误 这里有我的下面的代码和调试 因为 logcat 我一切都正确 public void a adirRegistro View
  • 根据另外 2 个表的联接结果插入到一个表中

    我在 MySQL 中有 3 个表 def table spot table tag mapping spot table def table tag id tag ja 2010490043 鉄道 2010680003 american f
  • 从动态名称获取 PHP 枚举

    我正在尝试从动态名称创建 php 8 1 枚举 看来不可能 所以给定一个枚举 enum Foo case bar 当然还有以下作品 Foo bar虽然这不会 name bar Foo name 这会导致 访问未声明的静态属性 App Con