我希望能够将枚举传递给函数。我知道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中不可行。
答案 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"
}
}
}