PHP:glob()vs列出特定文件的速度要慢多少?

时间:2016-08-30 15:59:27

标签: php

我的*.class.php目录中有很多/classes个文件。随着应用程序的更新,这些可能会发生变化,可能会添加更多内容,而某些内容可能会被删除。

我有一个文件,每个页面加载加载,包括所有必要的文件。现在,我这样做:

$files = glob($site->settings->root_path.'/classes/*.{php}', GLOB_BRACE);

foreach ($files as $file) {
  require_once($file);
}

这比单独指定每个文件慢得多吗?像:

require_once('/path/to/file1.php');
require_once('/path/to/file2.php');
require_once('/path/to/file3.php');

我问的原因是因为我认为我记得一段时间以来的某些事情让我相信迭代文件/文件夹是一个非常缓慢的过程,但我无法确切知道。

编辑:如果有人有比glob更好的建议,我会很乐意提供意见。

2 个答案:

答案 0 :(得分:2)

回答你的问题:是的,它肯定会变慢,只是因为你首先必须获取文件列表,然后执行require_once,这将再次访问文件系统以检查文件是否实际存在。

但在我看来,这是一种错误的做法。您尝试做的是autoloading

基本上,当脚本想要访问未定义的类时,您必须定义一个尝试从文件系统加载文件的函数。然后,此函数将类的名称(带名称空间)映射到文件系统上的文件,并尝试加载它。这样,您就不必担心文件夹中有多少文件,以及添加或删除文件的频率。

答案 1 :(得分:0)

只是为了添加已经存在的内容,自动加载的PHP文档包含以下代码段(稍作编辑),它应该适合您完美的工作。

Error:(49, 13) Failed to resolve: org.java-websocket:Java-WebSocket:1.3.1

例如,如果您在类/ ClassA.php中有一个名为ClassA的类,则只需构建ClassA,就像您手动需要它一样。它应该可以正常工作。希望有所帮助!