环境变量类型转换

时间:2017-04-27 09:15:03

标签: php symfony environment-variables

我发现自己处理的情况是我需要处理一些环境变量,这些变量传递给某些类型提示的类方法和抱怨的构造函数,因为它们期望一个整数,但它们会收到一个字符串,如env vars总是字符串,无论其内容如何。

我希望尽可能保持严格的类型提示,但目前的解决方案(例如Symfony DotEnv)似乎甚至没有考虑进行任何类型转换的可能性。

你将如何解决这个问题?正如我所说的,我想避免放松类型提示,但是env vars处理的当前状态似乎没有任何建议,只是字符串是“正确的”。

2 个答案:

答案 0 :(得分:0)

我倾向于使用某种形式的代理类,它理解它会得到一个字符串,但必须提供输出为整数等。

如果有许多环境变量进入类的构造,通过某种形式的value-object(也可以将它们转换为正确的类型)将它们放入,也可以简化参数列表,并使发生的事情变得更加明显。

答案 1 :(得分:0)

经过一些修补和研究后,我和一位同事提出了一个基于parameter.php文件的解决方案(而不是parameters.yml),我们可以在这里得到并按如下方式对变量进行类型转换:

$container->setParameter('foo.bar', (int) getenv('FOO_BAR'));

结果表明Symfony团队也有同样的需求:他们通过在DIC的Yaml文件中进行类型转换解决了这个问题,如下文所述> https://symfony.com/blog/new-in-symfony-3-4-advanced-environment-variables