PHP:glob() 与列出特定文件相比慢了多少?

标签 php

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

我有一个每次页面加载都会加载的文件,其中包含所有必需的文件。现在,我正在这样做:

$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 更好的建议,我很乐意提供意见。

最佳答案

回答你的问题:是的,肯定会慢一些,因为你首先要获取文件列表,然后执行require_once,这将再次访问文件系统来检查是否该文件确实存在。

但我认为这是错误的做法。您想要做的事情是通过 autoloading 实现的.

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

关于PHP:glob() 与列出特定文件相比慢了多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39232218/

相关文章:

php - 通过 POST (HTTP) 与支付网关交互

php - DOMDocument::loadHTML 错误

java - 解析 JSON 对象时出现 NullPointerException

php - CakePHP 日期验证

Javascript Foreach 遍历对象数组?

php - JSON 解码嵌套数组 PHP 循环

php - 类 Facebook 消息的数据库设计

PHP - 消息收件箱系统

php - Laravel 中通过 ajax 请求过滤数据

php - PHP @property 数据类型中的 MySQL TIMESTAMP 是什么?