php - PHP:foreach 的奇怪行为
问题描述
在我尝试使用 key
while 迭代之前按预期工作的代码下方。当我这样做时,我看到一个错误:“允许的内存大小为 1073741824 字节已用尽(试图分配 9223372043239833600 字节)”。查看所需的内存大小,它看起来很可怕。
getModules
返回一个关联数组,是$id
一个string
.
对可能的原因有任何想法吗?
foreach (Yii::$app->getModules() as $id => $module) {
echo '<pre>';
var_dump(gettype($module));
if (gettype($module) =='array') {
var_dump($module);
} else if (gettype($module) =='object') {
var_dump(get_class($module));
}
//var_dump($id); // <-- We have problems when try to uncomment this
echo '</pre>';
}
php -v
:
PHP 7.0.33-25+0~20200225.32+debian9~1.gbpa11893 (cli) (built: Feb 25 2020 13:16:41) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
with Zend OPcache v7.0.33-25+0~20200225.32+debian9~1.gbpa11893, Copyright (c) 1999-2017, by Zend Technologies
更新:我刚刚通过 ssh 打开并保存了模块数组,错误消失了。我不知道那是什么。看起来像 SSD 故障。
解决方案
每次执行 foreach 时总是重新加载所有模块的问题。
在存储模块列表之前添加一个变量,没关系。
更正后的代码:
$listOfModules = Yii::$app->getModules();
foreach ( $listOfModules as $id => $module) {
echo '<pre>';
var_dump(gettype($module));
if (gettype($module) =='array') {
var_dump($module);
} else if (gettype($module) =='object') {
var_dump(get_class($module));
}
//var_dump($id); // <-- We have problems when try to uncomment this
echo '</pre>';
}
推荐阅读
- apache - .htaccess php 中的重定向规则
- c# - 例如,是否可以在手机上打开游戏,或者在我的应用程序中进入图库?
- assembly - 无法弄清楚为什么我在 YouTube 上找到的 MIPS 汇编语言代码中遇到错误
- ios - 如何在IOS上通过硬件播放解码的音频数据?
- javascript - 如何在 JavaScript 中获取创建的音频元素的文件大小?
- node.js - 使用 Dgraph:在保存之前将操作暴露给前端并处理突变
- reactjs - Reactjs 中的 Unicode 表情符号渲染
- pandas - plot_recursive_coefficient statsmodels 创建子图
- ios - 如何改进 iOS Safari 对 PDF 作为 blob 链接的处理?
- ionic4 - 杀死应用程序 Ionic 5 后位置数据未发送到服务器