Laravel - 枚举变量?

时间:2014-08-24 14:25:09

标签: php laravel enums

我希望能够将枚举传递给函数。我知道PHP本身并不支持它们,但有些情况下枚举是有意义的。

例如,采取: function doPayment($payment_method = 'paypal') { // ... code goes here }

您可以通过doPayment('paypal'), doPayment(), doPayment('creditcard'),doPayment('creditcadr');

进行调用

这引入了拼写错误的可能性以及保持字符串一致和调试的痛苦。我们可以将它们作为诸如doPayment(2)之类的内容传递给它们,但这很丑陋,我们必须跟踪它们或将它们放在定义中,这是下一个例子:doPayment(PAYMENT_METHOD_PAYPAL);但是我们必须将定义放在一个所有人都可以访问的全局文件中。此外,我发现你最终得到了数百个定义的类,并且很难跟踪什么属于什么。

同时在Java中,它很简单:

doPayment(PaymentClass.PaymentMethod.PayPal); // or doPayment(PaymentMethod.PayPal);

如果可能的话,这真的是我正在寻找的。我想我可以为每组枚举创建一个外部类,但是也会添加很多文件(而Java示例则可以在父类中创建枚举)。

我想知道Laravel是否添加了一种方法来执行此操作,如果它在PHP中不可行。

1 个答案:

答案 0 :(得分:2)

您可以执行以下操作:

class PaymentMethod extends SplEnum {
    const __default = 1;
    // Our enum values
    const PAYPAL    = 1;
    const IDEAL     = 2;
    //..etc
}

然后,调用你的函数:

doPayment(PaymentMethod::PAYPAL);

Laravel是正确的命名空间,所以我会继续创建一个帮助类并将其添加到自动加载器中,这样你只需要将命名空间包含为"使用"在您想要使用它的控制器顶部。您还可以在项目的composer.json文件中添加类的路径

作曲家文档的一个例子:

{
    "autoload": {
        "psr-4": {
            "Monolog\\": "src/",
            "helper\\": "path/to/helpers"
        }
    }
}