我正在尝试创建一个关联数组,其值是对函数的引用。这样做的正确方法是什么?这段代码有效,但给了我一个警告。
<?php
$mergeCodes = array(
'rev:(\d+)' => reverse_me,
);
$test = "This is a [[rev:1234]] test";
echo "BEFORE: $test\n";
foreach ($mergeCodes as $code => $callback) {
$code = '\[\[' . $code . '\]\]';
$test = preg_replace_callback( "/$code/", $callback, $test );
}
echo "AFTER: $test\n";
function reverse_me($input) {
return strrev($input[1]);
}
?>
PHP Notice: Use of undefined constant reverse_me - assumed 'reverse_me' in /tmp/test2.php on line 4 BEFORE: This is a [[rev:1234]] test AFTER: This is a 4321 test
答案 0 :(得分:1)
据我所知,PHP没有这样的概念。您可能对JavaScript感到困惑。
您的最终目的似乎是打电话给preg_replace_callback()
。顾名思义,你必须用callback来提供它,这很简单。您只需要一个包含以下其中一个的常规变量:
'foo'
array('Foo', 'doBar')
array($myFoo, 'doBar')
在http://php.net/manual/en/language.pseudo-types.php#language.types.callback
找到进一步的参考资料答案 1 :(得分:1)
在PHP 5.3中,您可以将匿名函数(closures)存储在变量中:
$reverse_me = function($input) {
return strrev($input[1]);
}
$mergeCodes = array(
'rev:(\d+)' => $reverse_me
);
或者你甚至可以这样做:
$mergeCodes = array(
'rev:(\d+)' => function($input) {
return strrev($input[1]);
}
);
有关详细信息,请参阅http://php.net/functions.anonymous。
答案 2 :(得分:0)
我通过将值设为字符串'reverse_me'
来修复它。我猜$callback
是一个字符串对我来说不是很直观。