php - 为什么类名不回退到命名空间中的全局类名?
问题描述
我一直在阅读Using namespaces: fallback to global function/constant on php.net,它说该语言是按以下方式设计的:
类名总是解析为当前的命名空间名。因此,要访问内部或非命名空间的用户类,必须使用它们的完全限定名称来引用它们...... .....对于函数和常量,如果命名空间函数或常量,PHP 将回退到全局函数或常量不存在。
我的问题是,如果类可以回退到全局类,比如函数和常量,当它们没有在当前命名空间中定义时,会有什么问题?该设计选择的意识形态或技术困难是什么?
解决方案
它与自动加载和性能有关。
来自关于命名空间解析的RFC :
这里一个值得注意的方面是我们有自动加载的类。如果非完全限定标识符可用于引用全局标识符,“懒惰”程序员可以跳过完全限定标识符,即使他们完全打算引用全局标识符。使用自动加载,这可能会触发昂贵的操作,这些操作基本上是无用的。
但是对于函数,我们没有自动加载功能。这带来了回退到全局命名空间不会运行自动加载的性能风险的优势。因此,回退会便宜得多,但仍然会有不故意引用完全限定的全局命名空间的开销。
推荐阅读
- vue.js - 无法在 Vuejs 中为嵌套数组添加表单
- jquery - 无效的内容类型:application/x-www-form-urlencoded;字符集=UTF-8
- python - 通过从一个 csv 读取并在 Python 中将其写入其他 csv 来执行 NSLOOKUP
- node.js - nodejs发布方法不起作用
- spring-mvc - 使用 spring-boot-starter-web 和 thymeleaf 时填充下拉列表
- sql - 使用 SQL 从字符串中提取字符
- amazon-kinesis - KCL如何知道一个ProcessRecordsInput的记录数?
- java - 根据用户的 uid 获取另一个用户的数据
- jsf-2 - 如何在 JSF 中获取 URL 参数
- java - CXF注解:如何容错?