【问题标题】:Are use statements for PHP namespaces for performance, or for convenience?PHP 命名空间的 use 语句是为了性能还是为了方便?
【发布时间】:2019-10-13 04:52:38
【问题描述】:

在 PHP 中使用命名空间时,您可以选择如何引用它们。您可以将它们放在班级的首位

use Symfony\Component\HttpFoundation\JsonResponse;

或者你可以在调用类时包含它们:

return Symfony\Component\HttpFoundation\JsonResponse::create($data);

我的问题是,是否有任何性能考虑会偏爱一种方法而不是另一种?

我可以想象,在没有任何实际知识的情况下,在一个类中声明 use 可能是一种预加载类定义,它永远不会在实际代码执行中使用,具体取决于数据- - 这将通过仅在您实际调用命名空间类时引用它来解决。或者,如果您在开发过程中进行了声明,但最终没有调用该类,但在结束时不考虑删除它,您的代码将始终加载该类定义,并且永远不会使用它。

继续在运行时使用我对 PHP 的零星知识,在类定义中声明命名空间可能会被编译,使其在实际调用该类时运行得更快,而不必进行某种“动态”查找调用类时。

或者useing 命名空间位于类声明的顶部,只是为了方便开发人员,以避免大量重复输入?

我发现了这个问题,Are namespaces bad for performance?,但它只是询问在代码中的任何位置使用命名空间是否会对性能产生负面影响。它也是 7 岁;信息可能已过时。

【问题讨论】:

    标签: php performance namespaces


    【解决方案1】:

    我会说两者,例如在脚本中:

    use my\php\namesapce\TestClass;
    
    echo TestClass::class;
    $instance = new TestClass();
    
    1. 对性能有好处,因为:
      • PHP 每次只需要读取/评估一个单词(即TestClass)。
      • PHP 在内部将名称 (TestClass) 临时存储为键值对中完整路径的键(只要正在读取文件)。
      • 文件占用的空间更少,因此加载时间更短。
    2. 更方便,因为开发者不需要每次都写完整的路径。

    而且它不会影响auto-loader 的工作方式(参见另一个related post),因为:

    PHP 将使用完全相同的参数以完全相同的方式调用自动加载器,无论是否使用 use 语句。

    【讨论】:

    • 不确定性能声明 - 尽管可能存在一些非常小的差异,但它们很可能无法衡量。例如 - 块大小为 4KB,不确定不必每次都输入全名会有多大的不同。
    • 确实是微小的性能改进,但仍然比让它变慢要好;-)
    • 我想查看一些关于性能影响的数据或官方声明
    猜你喜欢
    • 2017-04-14
    • 2019-03-23
    • 1970-01-01
    • 2018-08-02
    • 2020-08-24
    • 2021-09-05
    • 2015-12-16
    • 1970-01-01
    • 2017-02-12
    相关资源
    最近更新 更多