我已经使用PHP 5.3一年多了,而且我总是这样做,我不确定是否正确:每当我使用当前上下文命名空间之外的类时,都使用{{ 1}}关键字:
use
所以在代码中我可以直接写:
use Another\Class
没关系,但我经常在我的文件开头有很多$object = new Class();
指令,维护不太好(如果我不使用这个类,我不太可能删除use
指令。
每次我使用这个类时,我也可以编写整个命名空间:
use
所以我想知道两件事:
$object = new \Another\Class();
关键字的缺点(除了每次必须编写整个命名空间的事实),就像你不能做的事情一样?修改 只是为了澄清:我知道干净的代码比小的性能调整更重要,我只想知道计算机何时工作,我喜欢感受到的努力: - )
答案 0 :(得分:6)
不使用use
的一大缺点是每次都需要输入全名。
使用的一大缺点是可能与已经定义的类发生名称冲突。我不确定PHP如何处理它,但无论哪种方式,你最终都会有一些额外的麻烦。加号是你实际上不必使用相同的名称...但是,减去那就是你有不与文件名对应的类。
在我们进入更多此类性能BS之前,不过:如果您关心别名一个令人讨厌的名称的性能成本,那么您做错了。不要担心“更快”的语法。期。你,你的用户,以及那个强制点击“重新加载”的人用手拿秒表,都不会注意到差异。 永远。有更好的事情需要优化,而且假设你已经达到了你需要的地步。
答案 1 :(得分:4)
答案 2 :(得分:1)
命名空间不向后兼容PHP< 5.3如果遇到兼容性问题,则必须删除namespace
和use
语句的所有情况。
答案 3 :(得分:0)
我使用Eclipse和PDT以及Eclipse完成语法的功能,使用use或complete命名空间,使其变得简单。
就个人而言,我大部分时间都使用“use”(当你使用类名自动完成时Eclipse自动创建),因为在代码上使用了更清晰的语法。
我也使用ClassLoader,我的项目使用的命令与命名空间的顺序相同,所以我的类加载器直接加载每个类。我不需要任何“包含”指令。
我总是使用类(带有fex异常),即使对于普通代码,通常我使用静态代码(没有实例),因为它使Eclipse很容易识别每个类,方法,变量和相关类型。
所以我的代码是很多文件,没有全局变量,并且在类上有分离的模块,所以类名冲突很少见。在这几种情况下,Eclipse可以轻松检测,我使用完整的语法,或缩写(手动,我使用命名空间的别名,所以我使用“namespace_alias \ classname”语法,这是更干净但不做碰撞)。
使用相同结构的命名空间和文件以及以这种方式搜索的类加载器(并在include_path目录中添加所有路径)在大型项目中非常高效。
例如...... \ Example \ Name \ Space \ Myclass搜索为
对于每个listof文件夹(项目的根目录+所有include_path除了“。”) 在开始文件夹上 - >文件夹(示例) - >文件夹(名称) - >文件夹(空格) - >文件(Myclass.inc或Myclass.php或Myclass.php5) ENDFOR
答案 4 :(得分:0)
使用use
关键字直到使用该类时才触发该类的导入(自动加载)(根据https://stackoverflow.com/a/35755296/5189780中的回答)
因此,它不会影响性能。
其他参数(例如在php 5.3下运行)与是否使用命名空间的决定更多有关。由于PHP尚未真正提供将类封装在名称空间中的可能性(限制访问),因此使用PHP有助于获得更清晰的代码并解决命名冲突。如果不使用use
关键字,就无法真正受益于名称空间。
根据php文档:
在PHP世界中,命名空间旨在解决库和应用程序的作者在创建可重用的代码元素(例如类或函数)时遇到的两个问题:
您创建的代码与内部PHP类/函数/常量或第三方类/函数/常量之间的名称冲突。 别名(或缩短)Extra_Long_Names的能力旨在缓解第一个问题,从而提高源代码的可读性。
如果您使用的是命名空间,请使用
use
关键字导入它们,这将使代码更加清晰和井井有条。