为什么我(不)使用"use"关键字作为名称空间

Jul*_*ien 9 php namespaces

我已经使用PHP 5.3一年多了,而且我总是这样做,我不确定是否正确:每当我使用当前上下文命名空间之外的类时,使用use关键字:

use Another\Class
Run Code Online (Sandbox Code Playgroud)

所以在代码中我可以直接写:

$object = new Class();
Run Code Online (Sandbox Code Playgroud)

这很好,但我经常use在我的文件开头有很多指令,而且维护不太好(如果我不使用这个类,我不太可能删除该use指令).

每次我使用这个类时,我也可以编写整个命名空间:

$object = new \Another\Class();
Run Code Online (Sandbox Code Playgroud)

所以我想知道两件事:

  • 有没有使用use关键字的缺点(除了每次都必须编写整个命名空间的事实),就像你不能做的事情一样?
  • 使用它有什么缺点吗?(它是否会稍微降低性能,因为它以某种方式导入了类)?

编辑 只是为了澄清:我知道干净的代码比小的性能调整更重要,我只想知道什么时候电脑工作,我喜欢感受努力:-)

cHa*_*Hao 7

使用的一大缺点use是每次都需要输入全名.

使用它的一大缺点是可能与已定义的类发生名称冲突.我不确定PHP如何处理它,但无论哪种方式,你最终都会有一些额外的麻烦.加号是你实际上不必使用相同的名称...但是,减号就是你有不与文件名对应的类.

然而,在我们进入更多这种性能BS之前, 如果你关心别名一个怪异名称的性能成本,那你就错了. 不要担心"更快"的语法.期.你,你的用户,以及那个强制点击"重新加载"的人用手拿秒表,都不会注意到差异. 永远. 有更好的事情要优化,而且假设你已经达到了你需要的程度.

  • 照顾任何成本都没有错.将表演瞄准性能而不是可读性可能是错误的.我想知道什么时候电脑做了什么.对于ex方法调用"cost"但注释不.我仍然可以避免评论,但我添加了单行"澄清"方法.我想知道,因为我更了解它是如何工作的,而不是因为我想盲目地(或者根本)提高性能.我已经澄清了我的问题的目的. (2认同)
  • @Julien:你提到的表现只是一个神经.我已经处理过那些会看到这个问题的人,看到提到可能的.001%速度命中,并且像"OMG`use`就是这样*sllooowww*!".这些是同样的idjits,他们会从代码中删除注释和空格,因此PHP不会解析得那么多.我对这个白痴品牌的耐受性很低,并试图在它开始之前阻止它.如果你从文化上学到任何东西,那就让米饭成为新人.正确性>可维护性>所有其他>优雅<=>*算法*效率>>>>*语法*效率,IMNSHO. (2认同)

Uda*_*dan 4

我首先想到的是使用别名的能力,例如:

use My\Full\Classname as Another;
Run Code Online (Sandbox Code Playgroud)

PHP 手册