PHP:如何连接对字符串变量的引用?

时间:2011-04-10 10:02:09

标签: php string reference concatenation

在以下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的值是按值传递的。)

为了使数组进行更改,我尝试使用对变量的引用,但它们似乎不适用于连接运算符.

感谢是否有人可以建议快速解决此问题。

5 个答案:

答案 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']);