用他的值替换常量名称

时间:2014-02-19 15:02:47

标签: php constants

如何将标记的常量名称替换为字符串中的值? 例如,

define('name', 'Evgeny');
echo foo('[verb], dear [name]');
# Must be '[verb], dear Evgeny' or '[something], dear Evgeny'

解决。接下来效果非常好:

function foo($s) {
    $m = array();
    preg_match_all('/(\[[^\]]+\])/', $s, $m);
    $m = $m[0];
    print_r($m);
    $v = array();
    for ($i = 0; $i < count($m); $i++) {
        $name = substr($m[$i], 1, -1);
        $v[$i] = defined($name) ? constant($name) : '!' . $name . '!';
    }
    return str_replace($m, $v, $s);
}

define('name', 'Evgeny');
$str = '[verb], dear [name]';
echo foo($str);

返回'!verb !,亲爱的Evgeny'

3 个答案:

答案 0 :(得分:0)

define('name', 'Evgeny');
echo '[verb], dear ', name;

单独使用它,不要用引号将其包装

答案 1 :(得分:0)

怎么样:

echo foo('[verb], dear '.name);

答案 2 :(得分:0)

你会使用:

echo foo( '[verb], dear ' . name );