PHP Eloquent枚举

3

有没有人熟悉使用这个库:https://github.com/eloquent/enumeration

我在尝试将常量的实例转换回常量值时遇到了问题。

class TestEnum extends AbstractEnumeration
{
    const THING1 = 'test1';
    const THING2 = 'test2';
}

class DoStuff 
{
    public function action(TestEnum $test)
    {
        if($test === 'test1') {
            echo 'THIS WORKS';
        }
    }
}

$enumTest = TestEnum::THING1();
$doStuff = new DoStuff();
$doStuff->action($enumTest);

我的目标是让方法action打印出'THIS WORKS'。因为$test是TestEnum的一个实例,所以这个条件不成立。


这个可以运行(https://eval.in/183142),虽然我不确定它是否符合你的要求。 - scrowler
我知道没有括号它可以工作,但那不是我想要的。目标是保持type hinting在action()中起作用。无论如何,谢谢@scrowler! - theamycode
是的 - 括号告诉 PHP 要寻找一个函数... - scrowler
使用该库时,括号表示TestEnum::THING1()是TestEnum类的一个实例。如果您正在使用phpstorm,它会出现错误。 - theamycode
1个回答

2

你离正确不远,但有两个问题:

  1. 大小写很重要。Thing1THING1是不同的。
  2. $test被当作字符串处理时,会取出它的键THING1,而你需要获取它的值$test->value()

示例:

class TestEnum extends AbstractEnumeration
{
    const THING1 = 'test1';
    const THING2 = 'test2';
}

class DoStuff
{
    public function action(TestEnum $test)
    {
        if($test->value() === 'test1') {
            echo 'THIS WORKS';
        }
    }
}

$enumTest = TestEnum::THING1();
$doStuff = new DoStuff();
$doStuff->action($enumTest);

输出:

THIS WORKS

case这个东西是打错了,谢谢你指出来。所以我理解->value()部分是我的目标。那是一个内置的php函数吗?在我的情况下,如果我要编写一个单独的函数来确定值,代码会变得混乱和冗长。@derp - theamycode
刚在文档中找到了。谢谢! - theamycode

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接