在以下PHP代码段中,$phrases
需要反映$greeting
中所做的更改。怎么能实现这一目标?
$greeting = "Hello!";
$phrases = array('greeting' => $greeting . " Glad to see you.");
echo $phrases['greeting'];
Hello! Glad to see you.
$greeting = "How are you?";
echo $phrases['greeting'];
Hello! Glad to see you.
注意,即使在$greeting
变量的值发生变化之后,数组也保持不变(这通常是预期的行为,因为$greeting
var的值是按值传递的。)
为了使数组进行更改,我尝试使用对变量的引用,但它们似乎不适用于连接运算符.
。
感谢是否有人可以建议快速解决此问题。
答案 0 :(得分:2)
向字符串添加占位符的最常用方法是printf()
$phrases = array('greeting' => "%s Glad to see you.");
$greeting = "Hello!";
printf($phrases['greeting'],$greeting);
$greeting = "How are you?";
printf($phrases['greeting'],$greeting);
答案 1 :(得分:0)
简单,使用&。
示例:
$a = 'a';
$b = array(&$a);
$a = 'b';
print_r($b);
打印:
数组([0] => b)
编辑:连接字符串时不能使用& -symbol。您应该重新定义整个变量或使用printf或其他东西(但我建议您重新定义整个变量。)
答案 2 :(得分:0)
因此,每当您更改$pharses
的值时,您希望$greeting
数组中的值发生变化吗?这是不可能的,因为当你创建字符串时,会创建一个“字符串对象”,它是对内存中某个部分的引用,其中的值是硬编码的,永远不会被更改。
你必须写一个函数,比如
function getPhrase(which) {
// do concatenation using $greeting
}
只要您想输出短语,就必须打电话。
答案 3 :(得分:0)
您正在尝试创建一个动态字符串变量,这在php中是不可能的。
您需要使用一个功能。
可能与您的代码最接近的方法是使用引用存储为数组并使用implode:
$greeting = "Hello!";
$phrases = array(&$greeting," Glad to see you.");
echo implode($phrases);
$greeting = "Hi!";
echo implode($phrases);
编辑:删除了其他两种可能的方法
答案 4 :(得分:0)
几年后.. 你可以用以下方式来解决这个问题:
$greeting = "Hello!";
$phrases = array('greeting' => function() use (&$greeting) {
return $greeting." Glad to see you.";
});
echo call_user_func($phrases['greeting']);
$greeting = "Oh NOOO!";
echo call_user_func($phrases['greeting']);