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

PHP中create_function创建的闭包无输出,是否存在语法问题?

问题分析与解决
  • 核心问题:create_function 返回的是临时生成的函数名字符串(如 lambda_1),但 function_exists() 仅检测全局命名函数是否存在,闭包/匿名函数不属于这个范畴,所以你的tagWrap函数里的判断会返回false,导致无输出。

  • 修复方案:

    1. 把判断条件从function_exists($func)改成is_callable($func),is_callable()可以识别所有可调用类型,包括闭包、函数名字符串、对象方法等。
    2. 注意:create_function在PHP7.2已被废弃,PHP8.0直接移除,现在建议用原生闭包语法,兼容性和可读性都更好。

示例代码修改

原来的代码(无输出):

function tagWrap($text, $func = null) {
    if (function_exists($func)) {
        echo $func($text);
    }
}

// 使用create_function的调用
$underlineFunc = create_function('$t', 'return "<u>$t</u>";');
tagWrap('测试文本', $underlineFunc);

修改后(正常输出):

function tagWrap($text, $func = null) {
    if (is_callable($func)) {
        echo $func($text);
    }
}

// 推荐的原生闭包写法
$underlineFunc = function($t) {
    return "<u>$t</u>";
};
tagWrap('测试文本', $underlineFunc);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 12:12:13