PHP警告:Creating default object from empty value问题求助
解决方案:消除"Creating default object from empty value"警告
问题出在你直接给未初始化的数组元素赋值对象属性——PHP 7.4+会对这种自动创建默认对象的行为抛出警告。你之前错误地把整个$qryResults定义为stdClass,但代码里需要它是数组(存储多组结果),所以导致致命错误。
正确的做法是:在给对象属性赋值前,先将数组的对应元素显式初始化为stdClass对象。
修改后的初始化代码
$qryResults = array(); // 先初始化当前索引的元素为stdClass对象 $qryResults[$sqlidx] = new stdClass(); $qryResults[$sqlidx]->numrows = 0; $qryResults[$sqlidx]->numcols = odbc_num_fields($resultSets[$sqlidx]); // 额外初始化fields数组,避免后续赋值时出现类似警告 $qryResults[$sqlidx]->fields = array();
后续读取结果的代码优化
你读取数据库结果的代码中,直接使用$qryResults[$sqlidx]->fields[$numrows][$j]赋值,为彻底消除潜在警告,可以在每次新增行时显式初始化子数组:
// 在新增行前,先初始化当前行的数组 $currentRow = $qryResults[$sqlidx]->numrows; $qryResults[$sqlidx]->fields[$currentRow] = array(); $qryResults[$sqlidx]->fields[$currentRow][$j] = date('m/d/Y H:i:s', odbc_result($resultSets[$sqlidx], $j + 1));
为什么之前的方法无效?
- 直接赋值属性:PHP会自动创建默认对象,但7.4+版本提升了语言严格性,因此触发警告。
- 将
$qryResults定义为stdClass:代码中需要它是数组(通过$sqlidx索引访问多组结果),对象无法使用数组索引语法,所以触发致命错误。
内容的提问来源于stack exchange,提问作者Ken Emerson
相关产品推荐
相关产品推荐

