
PHP 内置函数 getdate() 会返回包含日期信息的关联数组,若自定义函数误用同名 getDate(大小写不敏感于函数名解析),调用时实际执行的是系统函数,导致输出“Array”而非预期字符串。
php 内置函数 `getdate()` 会返回包含日期信息的关联数组,若自定义函数误用同名 `getdate`(大小写不敏感于函数名解析),调用时实际执行的是系统函数,导致输出“array”而非预期字符串。
这是一个典型的函数命名冲突问题。尽管你定义的是 getDate()(首字母大写),但在 PHP 中,函数名是大小写不敏感的。当你调用 getDate($iDATE) 时,PHP 实际匹配到了内置函数 getdate()(全小写),而非你自定义的函数——因此返回的是一个包含年、月、日等键值的关联数组,而 print 或字符串拼接时直接输出数组,就显示为字面量 Array。
✅ 正确做法:立即重命名你的自定义函数,避开所有内置函数名。推荐使用语义清晰、带前缀或驼峰风格的名称,例如 formatCyyMmDdToDate 或 convertCyyMmDdToUsFormat。
以下是修复后的完整示例:
// ✅ 安全、语义明确的函数名
function convertCyyMmDdToUsFormat(string $iDATE): string {
// 验证输入长度(CYYMMDD 共7位,如 "1230415" → 2023-04-15)
if (strlen($iDATE) !== 7) {
throw new InvalidArgumentException("Invalid CYYMMDD format: expected 7 digits, got " . strlen($iDATE));
}
$century = $iDATE[0] === '1' ? '20' : '19'; // C=1 → 20xx, C=0 → 19xx(常见规则,按需调整)
$year = $century . substr($iDATE, 1, 2);
$month = substr($iDATE, 3, 2);
$day = substr($iDATE, 5, 2);
return sprintf('%s/%s/%s', $month, $day, substr($year, 2, 2)); // 输出 MM/DD/YY
}
// 调用示例
$iDATE = '1230415'; // 表示 2023年04月15日 → 04/15/23
echo "<td align="left" class="Col2"><font face="Calibri" size="3">" . convertCyyMmDdToUsFormat($iDATE) . "</font></td>";
// 输出:<td align="left" class="Col2"><font face="Calibri" size="3">04/15/23</font></td>
⚠️ 注意事项:
-
永远避免覆盖/重定义 PHP 内置函数名(如
date,getdate,print_r,array_merge等),可查阅 PHP 手册 — Reserved Words & Functions; - 使用严格类型声明(
string $iDATE)和返回类型(: string)提升健壮性; - 建议补充输入校验与异常处理,防止无效数据引发静默错误;
- 若项目已使用命名空间,也可将函数封装在自定义命名空间中(但普通函数仍不可与全局内置名冲突)。
总结:不是代码逻辑错误,而是函数名撞车。一次重命名,即可彻底解决“Array”误输出问题,并提升代码可维护性与可读性。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











