You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用接口及其子类的单函数打印数组的PHP报错问题

问题分析与修复方案

嘿,我一眼就瞅到问题所在了——你错误地把类的成员方法当成全局函数来调用,还不小心覆盖了之前创建的worker实例,这才导致PHP报错说找不到被调用的函数。让我一步步帮你搞定:

核心错误点

  • 你已经创建了worker类的实例$temp = new worker();,但调用printout的时候,没使用对象调用的语法(->),直接写成了printout($id, $warr)——PHP根本找不到这个全局函数,可不就报错嘛。
  • 你还多做了个无用操作:把printout的返回值(这个方法本来就没返回值,默认是null)重新赋值给了$temp,直接把之前好好的worker实例给覆盖了,完全没必要哈。

修正后的完整代码

<!DOCTYPE HTML>
<html>
<head>
</head>
<body>
<p><a href="selection.php">Back to selection php</a>
<?php
interface employee {
    public function printout($wid, $arr);
}
class worker implements employee {
    public function printout($wid, $arr) {
        for ($i=0; $i<7; $i++) {
            // 这里要注意:你的$arr[$wid][$i]是单个字符串,不是数组,原来的foreach会报错
            echo $arr[$wid][$i] . "<br>";
        }
    }
}
$temp = new worker();
$id = "60800";
$warr = array();
$warr[$id][0] = "60800";
$warr[$id][1] = "Worker";
$warr[$id][2] = "Wang Mingchun";
$warr[$id][3] = "Day";
$warr[$id][4] = "NT$1000";
$warr[$id][5] = "N/A";
$warr[$id][6] = "N/A";
// 关键修正:用对象->方法名的方式调用成员方法,别再重新赋值$temp了
$temp->printout($id, $warr);
?>
</body>
</html>

额外优化建议

  • 你代码里的&lt;和&gt;是HTML转义字符,在PHP代码块里直接用<和>就行,不用转义,转义是写HTML内容时才需要的。
  • 可以给printout方法加个安全判断,避免worker ID不存在时报错,同时用foreach让代码更灵活:
public function printout($wid, $arr) {
    if (!isset($arr[$wid])) {
        echo "Worker ID {$wid} doesn't exist!<br>";
        return;
    }
    // 用foreach遍历,不用硬写循环次数7,后续调整数组元素数量也不用改代码
    foreach ($arr[$wid] as $value) {
        echo $value . "<br>";
    }
}

内容的提问来源于stack exchange,提问作者Spammer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 11:37:26