在PHP中,我在类级别使用名称空间,但是Netbeans一直告诉我也要命名全局函数。
str_replace('stuff');
则Netbeans将建议将其更改为:
\str_replace('stuff');
这是一个PHP推荐,还是只是Netbeans过于热心了?我还没有能够在PHP文档中找到任何说明这两种情况的东西。
我看不出它会在代码中造成任何问题。然而,在不知道Netbeans最初推荐它的原因的情况下就忽略它,感觉是错误的。但在不知道这样做是正确的情况下就改变我的编码实践,也感觉是不对的。
4条答案
按热度按时间y53ybaqx1#
中没有此类建议
也没有必要使用全局标识符,因为当当前名称空间中没有该名称的函数时,PHP将回退到全局函数定义。
话虽如此,添加标识符的唯一原因是为了更明确地表明,您希望使用实际的全局标识符,以防止在有人将同名函数添加到当前名称空间时意外更改代码行为。
您可能希望在Netbeans Mailing List上询问有关IDE建议此操作的原因的更多详细信息。
sg3maiej2#
当然是过分热心了,但是我不能用PHP插件1.17.1复制这是Netbeans 7.0.1。无论如何,这不是惯例,我根本不认为这是一个最佳实践。
wixjitnu3#
Netbeans根本没有遵循解析名称空间as documented的文档规则:
1.全局类(如DateTime)需要被限定,否则PHP将在当前名称空间中查找该类。
1.全局函数(如array_filter)和常量如果在当前命名空间中不存在,则可以在全局命名空间中找到它们(没有显式限定)。
换句话说,您的代码应该被认为是基于文档化规则的惯用代码。
hkmswyz64#
What are compiler optimized internal PHP functions and should you import them via use statement?
我们都是好奇的生物,你可能和我一样想知道:为什么要这么做呢?函数调用不会自动退回到全局名称空间吗?是的,它们会退回到全局名称空间,从技术上讲,你不需要使用函数或前缀作为全局名称空间的分隔符。
但开源库这样做还有另一个技术原因:少数PHP内部函数具有编译器优化版本,可以避免PHP引擎中内部函数调用的大量内部开销。您可以在PHP的zend_compile. c文件中找到这些函数。