为了避免使用超全球,似乎我必须使用这样的东西:
$doc_root = filter_input(INPUT_SERVER, 'DOCUMENT_ROOT');
获取文档根目录。但是如果没有指定过滤器,这只是FILTER_UNSAFE_RAW
...要使用什么过滤器,是否有路径的预定义过滤器,或者我需要使用正则表达式创建自己的过滤器。
现在我已经过滤了$doc_root
我每次想要使用它时都会从$_SERVER
超全球阵列重新过滤吗?或者,我应该在函数内部声明global $doc_root
然后使用它(或者更好的做法是引用$GLOBALS
数组吗?)?
答案 0 :(得分:1)
使用superglobals本身并不错。但是你应该在代码的深处避免它们,因为这会增加对环境的隐藏依赖性并使代码更难以测试。
因此,如果您担心这个隐藏的依赖关系,您应该使用前端控制器中的值并使用它注入类中。或者,如果您正在使用DI容器,则可以定义返回此值的服务。
使用filter_input
函数根本没有帮助 - 它只是隐藏了超全局访问。
也许更安全的选择确实是使用__DIR__
常量。