涉及SplEnum时,迭代PHP类变量

时间:2016-02-17 10:53:50

标签: php spl

我正在尝试遍历包含SplEnum的PHP类中的变量。它不起作用。这是代码:     

class enum extends SplEnum { const First = 1; }

class fruit
{
    public $enum;
    public $variable = 2;
    public function __construct(enum $enum)
    {
        $this->enum = $enum;
    }
}

$apple = new fruit(new enum(enum::First));
foreach ($apple as $key => $value) {
    echo "[$key] => $value\n";
}

这是输出:

[enum] => 1
PHP Fatal error:  Uncaught exception 'UnexpectedValueException' with message 'Value not a const in enum enum' in /home/test.php:16
Stack trace:
#0 /home/test.php(16): unknown()
#1 {main}
  thrown in /home/test.php on line 16

似乎正在发生的事情是foreach循环试图将每个类变量转换为enum。如何正确迭代类中的变量?

1 个答案:

答案 0 :(得分:2)

众所周知,SPL Lib是一辆越野车 您可以将变量声明的顺序切换为

public $variable = 2;
public $enum;

这个例子可行。 如果您完全删除enum属性声明,它也会起作用。

class fruit
{
    public $variable = 2;
    public function __construct(enum $enum)
    {
        $this->enum = $enum;
    }
}

也许你最好的选择是避免它,或保持私密/受保护。