2015-08-28 82 views
0

PHP当然执行双引号中的字符串变量替换:PHP双引号串分析器

$test = 'something'; 
echo "This is a $test"; 
//Output: This is a something 

我正在寻找的是PHP的变量替换,但有回调:

function callback($key, &$value) { 
    $value=strtoupper($value); 
} 

$test = 'something'; 
echo some_cool_function('This is a $test', callback); 

//Output: This is a SOMETHING 

(当然这是一个完全任意的例子 - 我不想做一些简单的操作,只要将值转换为大写就可以)

因此callback将被调用为ea ch变量(或者可能包含所有变量的数组,如'$test' => 'something')。这样我可以直接操作PHP,并且可以使用PHP执行的变量和替换值。

我知道类似的东西可以用回调等正则表达式来完成。但是,PHP处理变量如$test[0],复杂语法({ })等可能会复杂起作用的复杂性非常高。

PHP是否以某种方式公开其用于双引号字符串的内部字符串分析器?

+0

我很困惑,你想要做什么。你的意思是像一个for语句循环变量?例如:'$ test = ['test1','test2']; foreach($ test as $ val){$ testString =“这是一个$ val”; some_cool_function($ testString); }' – rubes114

+0

双引号字符串处理本身并不公开。你必须[考虑eval](http://stackoverflow.com/questions/18197348/replacing-variables-in-a-string),或者使用更合理的正则表达式来替换数组和复数变量,或者使用'{ $ ...}'复杂的变量名[或'{...}'标记](http://stackoverflow.com/questions/18197348/replacing-variables-in-a-string)的依赖。 – mario

+0

我已经更新了我的问题,并提供了我正在寻找的更详细的示例。 – Dan

回答

0

如果我理解正确,您打算some_cool_function将函数callback应用于字符串'This is a $test'

通过使用一个变量会做的伎俩引用的回调函数:

$cb = callback; 
$test = 'something'; 
echo "This is a {$cb($test)}";