PHP dynamic string update with reference

99封情书 提交于 2021-02-08 06:22:43

问题


Is there any way to do this:

$myVar = 2;
$str = "I'm number:".$myVar;
$myVar = 3;

echo $str;

output would be: "I'm number: 3";

I'd like to have a string where part of it would be like a pointer and its value would be set by the last modification to the referenced variable.

For instance even if I do this:

 $myStr = "hi";
 $myStrReference = &$myStr;
 $dynamicStr = "bye ".$myStrReference;
 $myStr = "bye";
 echo $dynamicStr;

This will output "bye hi" but I'd like it to be "bye bye" due to the last change. I think the issue is when concatenating a pointer to a string the the pointer's value is the one used. As such, It's not possible to output the string using the value set after the concatenation.

Any ideas?

Update: the $dynamicStr will be appended to a $biggerString and at the end the $finalResult ($biggerString+$dynamicStr) will be echo to the user. Thus, my only option would be doing some kind of echo eval($finalResult) where $finalResult would have an echo($dynamicStr) inside and $dynamicStr='$myStr' (as suggested by Lawson), right?

Update:

$myVar = 2;
$str = function() use (&$myVar) {
    return "I'm number $myVar";
};

$finalStr = "hi ".$str();
$myVar = 3;
echo $finalStr; 

I'd like for this to ouput: "hi I'm number 3" instead of "hi I'm number 2"...but it doesn't.


回答1:


The problem here is that once a variable gets assigned a value (a string in your case), its value doesn't change until it's modified again.

You could use an anonymous function to accomplish something similar:

$myVar = 2;
$str = function() use (&$myVar) {
    return "I'm number $myVar";
};

echo $str(); // I'm number 2
$myVar = 3;
echo $str(); // I'm number 3

When the function gets assigned to $str it keeps the variable $myVar accessible from within. Calling it at any point in time will use the most recent value of $myVar.

Update

Regarding your last question, if you want to expand the string even more, you can create yet another wrapper:

$myVar = 2;
$str = function() use (&$myVar) {
    return "I'm number $myVar";
};

$finalStr = function($str) {
    return "hi " . $str();
}

$myVar = 3;

echo $finalStr($str);



回答2:


This is a little simpler than I had before. The single quotes tell PHP not to convert the $myVar into a value yet.

<?php
$myVar = 2;
$str = 'I\'m number: $myVar';
$myVar = 3;

echo eval("echo(\"$str\");");
?>


来源:https://stackoverflow.com/questions/16062349/php-dynamic-string-update-with-reference

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!