使用接口及其子类的单函数打印数组的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>
额外优化建议
- 你代码里的
<和>是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
相关产品推荐
相关产品推荐

