gpt4 book ai didi

php - 通过字符串从枚举中获取大小写

转载 作者:行者123 更新时间:2023-12-05 01:05:45 26 4
gpt4 key购买 nike

我寻找一个简单的解决方案来通过字符串获取枚举的大小写。有 BackedEnums。例如:

<?php
enum Status: string
{
case OK = "OK";
case FAILED = "FAILED";
...
}
$status = Status::tryFrom("OK"); // or from("OK");

但我不想为了得到这个结果而写两次同一个词。在没有 BackedEnums 的情况下,是否有一种本地方法来获取案例?我想要类似的东西:

<?php
enum Status
{
case OK;
case FAILED;
...
}
$status = Status::get("OK"); //returns Status::OK;

或者我需要为此编写自己的功能吗?例如:

enum Status
{
case OK;
case FAILED;
public static function get(string $name): null|Status
{
$name = strtoupper(trim($name));
if(empty($name))
return null;

foreach(Status::cases() as $status)
{
if($status->name == $name)
return $status;
}
return null;
}
}

Status::get("OK"); // -> Status::OK

有没有更好的方法来达到同样的效果?

最佳答案

ReflectionEnum 就是答案。在 php8.1 中枚举的 rfc 中有一个章节 Reflection

你有方法 getCase(string $name) 并结合 getValue() 你得到枚举。使用该函数,您可以通过字符串值获取大小写。

您的示例如下所示:

$status = (new ReflectionEnum("Status"))->getCase("OK")->getValue();

最好与 ExceptionHandler 一起使用,因为如果未找到传输的字符串,可能会以 ReflectionException

结尾

关于php - 通过字符串从枚举中获取大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70393792/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com