检查字符串是否可变或只是一个字符串

Age*_*DeO 5 php variables

我有一个名为的变量 $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'是字符串,需要这样做.

我怎样才能使它能够工作?

dec*_*eze 6

字符串始终只是一个字符串.字符串永远不是变量.

案例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)