我有一个名为的变量 $Title
变量可能包含一个字符串,
例A:'Foo'
但变量也可以包含对不同变量的引用,
例子B:'$ Foo'
当我使用print $Titlephp时,返回'Foo'(EX A)或'$ Foo'(EX B)作为字符串.
当我使用print $$Titlephp尝试返回名为$ Foo(EX A)或$$ Foo(EX B)的变量的值时
我想完成以下操作:当$Title只包含一个字符串时,打印该字符串当$Title包含对变量的引用时,查找该变量并显示其内容
我可以只查找字符串中的第一个字符.当它是$使用echo $$TitleELSE时echo $Title,但它可能$Title包含这样的内容:
$Title = '$Foo . \'Bar\' . $Bar . \'Foo\'';
Run Code Online (Sandbox Code Playgroud)
在这种情况下,$Foo并且$Bar是变量并需要这样做,'Bar'和'Foo'是字符串,需要这样做.
我怎样才能使它能够工作?
字符串始终只是一个字符串.字符串永远不是变量.
案例1,一个普通的字符串:
$foo = 'bar';
echo $foo; // bar
echo $$foo; // content of $bar if it exists
Run Code Online (Sandbox Code Playgroud)
案例2,"字符串中的变量":
$foo = 'bar';
$bar = "$foo"; // $bar is now the string 'bar', the variable is interpolated immediately
echo $bar; // bar
echo $$bar; // bar (content of $bar)
Run Code Online (Sandbox Code Playgroud)
案例3,包含一美元的字符串:
$foo = '$bar';
echo $foo; // $bar
echo $$foo; // invalid variable name "$bar"
Run Code Online (Sandbox Code Playgroud)
$$foo解析为变量名称$$bar,这是一个无效的名称.
你不能拥有"字符串中的变量".写入会"$foo"立即插值$foo并返回一个新字符串.
也许,你想要这个:
$foo = 'bar'; // the string "bar"
$baz = '$foo'; // the string "$foo"
// MAGIC
echo $baz; // echoes "bar"
Run Code Online (Sandbox Code Playgroud)
即,如果您的字符串包含一个美元后跟一个变量的名称,您想要替换该值.首先我要说这是一个坏主意.然后我会说你必须从你的字符串中提取所有那些"美元字符串",检查变量是否存在,然后使用正常的字符串操作替换字符串中的值.是的,你可以使用eval,但不,这不是一个好主意.对于上面的代码,这样的事情会:
if ($baz[0] == '$') {
$varName = substr($baz, 1);
if (isset($$varName)) {
$baz = $$varName;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5381 次 |
| 最近记录: |