preg_replace_callback:将替换回调作为不起作用的变量传递

时间:2012-09-13 09:17:43

标签: php callback preg-replace-callback

这不起作用

        $check["pattern"] = "/correct/";
    $callback = "function ($m) { return ucfirst($m[0]);}";
    echo preg_replace_callback($check["pattern"],$callback,"correct" );

output: correct

这有效

        $check["pattern"] = "/correct/";
    echo preg_replace_callback($check["pattern"],function ($m) { return ucfirst($m[0]);},"correct" );

output: Correct

为什么以及如何使用var中存储的函数? :)

2 个答案:

答案 0 :(得分:1)

你为什么要那样做?我认为没有理由将函数存储在变量中,说实话。不过,如果你真的想这样做,请看看create_function

<?php
$check["pattern"] = "/correct/";
$callback = create_function('$m', 'return ucfirst($m[0]);');
echo preg_replace_callback( $check['pattern'], $callback, "correct" );

// Output: "Correct"

答案 1 :(得分:1)

如果您在$callback = "function ($m) { return ucfirst($m[0]);}";上执行var_dump,则结果为字符串。在工作情况下,您将Closure(匿名函数)作为回调传递。

manual很清楚:允许关闭,如果你传递一个字符串,它必须是函数的名称