首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP `__toString`魔术方法

PHP `__toString`魔术方法
EN

Stack Overflow用户
提问于 2021-12-05 15:25:30
回答 4查看 8.7K关注 0票数 12

我想知道为什么不能为enum提供__toString实现。

艾德说:"Enum可能不包括'__toString'“。然而,这是我第一次想到的事情,一旦我创造了枚举。在此之前,我使用了将字符串封装在代码中的值对象,在必要时使用字符串转换。现在我想把它们迁移到墓穴里,但它们抗拒。

代码语言:javascript
复制
#[Immutable]
enum SaveKlinesFromApiQueue: string
{
    case DEFAULT = 'save_klines_from_api_queue';
    case PRIORITY = 'save_klines_from_api_priority_queue';

    public function __toString(): string
    {
        return $this->value;
    }
}
EN

回答 4

Stack Overflow用户

发布于 2022-07-14 13:52:59

我认为如果您想在常规类中像使用const一样使用Enum,就不应该使用Enum。考虑创建一个抽象类,而不是如下所示:

代码语言:javascript
复制
abstract class SaveKlinesFromApiQueue
{
    public const DEFAULT = 'save_klines_from_api_queue';
    public const PRIORITY = 'save_klines_from_api_priority_queue';
}

除了正确使用Enum之外,在您的情况下,您还可以使用:

代码语言:javascript
复制
echo SaveKlinesFromApiQueue::DEFAULT->name;

Result: "DEFAULT"

代码语言:javascript
复制
echo SaveKlinesFromApiQueue::DEFAULT->value;

Result: "save_klines_from_api_queue"

票数 5
EN

Stack Overflow用户

发布于 2022-02-07 22:02:02

正如chris提到的,不允许使用神奇的方法。

最重要的两个(?)常用用法:

要获得单个字符串的值,只需使用->value即可。

如果您想要它们的字符串值,只需在方法中添加一个循环:

代码语言:javascript
复制
    public static function strings(): array
    {
        $strings = [];
        foreach(self::cases() as $case) {
            $strings[] = $case->value;
        }
        return $strings;
    }
票数 1
EN

Stack Overflow用户

发布于 2022-10-07 14:34:10

对于简单的值Enum,使用"const“而不是"case":

代码语言:javascript
复制
enum SaveKlinesFromApiQueue: string {
    const DEFAULT = 'save_klines_from_api_queue';
    const PRIORITY = 'save_klines_from_api_priority_queue';
}

echo SaveKlinesFromApiQueue::DEFAULT;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70235747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档