PHP调用带回调参数的showName函数无法显示Hello如何解决
问题原因
sampleName函数使用echo直接打印内容,没有设置返回值,PHP中无显式return的函数默认返回null,因此showName里拼接"Hello" . $filter($name)时,$filter($name)部分的值为null,等于没拼接内容。- 你调用
showName时仅执行了函数,没有用echo输出它的返回值,就算showName生成了包含Hello的字符串也不会显示出来。
调整方案
方案1(最常用):修改sampleName为返回值模式
把sampleName的输出逻辑从直接打印改为返回字符串,同时调用showName时加上echo输出返回结果即可:
function sampleName(string $name) { return ", good morning $name" . PHP_EOL; } function showName(string $name, $filter): string { return "Hello" . $filter($name); } echo showName("John", "sampleName");
运行后输出结果:
Hello, good morning John
方案2:保留sampleName直接打印的特性
如果业务要求sampleName必须直接输出内容,可以用输出缓冲区捕获它的打印内容再拼接:
function sampleName(string $name) { echo ", good morning $name" . PHP_EOL; } function showName(string $name, $filter): string { // 开启输出缓冲区,捕获echo的内容 ob_start(); $filter($name); // 获取缓冲区内容并关闭缓冲区 $filterOutput = ob_get_clean(); return "Hello" . $filterOutput; } echo showName("John", "sampleName");
内容的提问来源于stack exchange,提问作者Kholid Saifulloh
相关产品推荐
相关产品推荐

