我有一个名为$Title
变量可能包含字符串
示例A:'Foo'
但变量也可以包含对不同变量的引用,
例子B:'$ Foo'
当我使用print $Title
php时,将'Foo'(EX A)或'$ Foo'(EX B)作为字符串返回。
当我使用print $$Title
php尝试返回名为$ Foo(EX A)或$$ Foo(EX B)的变量的值时
我想完成以下事项:
当$Title
只包含一个字符串时,请打印该字符串
当$Title
包含对变量的引用时,请查找该变量并显示其内容
我可以查找字符串中的第一个字符。如果是$ use echo $$Title
ELSE使用echo $Title
,但$Title
可能包含以下内容:
$Title = '$Foo . \'Bar\' . $Bar . \'Foo\'';
在这种情况下,$Foo
和$Bar
是变量,需要这样做,'Bar'和'Foo'是字符串,需要这样做。
我怎样才能使它能够工作?
答案 0 :(得分:6)
字符串始终只是一个字符串。字符串永远不是变量。
案例1,一个普通的字符串:
$foo = 'bar';
echo $foo; // bar
echo $$foo; // content of $bar if it exists
案例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)
案例3,其中包含一美元的字符串:
$foo = '$bar';
echo $foo; // $bar
echo $$foo; // invalid variable name "$bar"
$$foo
解析为变量名$$bar
,这是一个无效的名称。
你不能拥有“字符串中的变量”。写"$foo"
会立即插入$foo
的值并返回一个新字符串。
也许,你想要这个:
$foo = 'bar'; // the string "bar"
$baz = '$foo'; // the string "$foo"
// MAGIC
echo $baz; // echoes "bar"
即,如果您的字符串包含一个后跟变量名称的美元,则您希望替换该值。首先我要说这是一个坏主意。然后我会说你必须从你的字符串中提取所有那些“美元字符串”,检查变量是否存在,然后使用正常的字符串操作替换字符串中的值。是的,你可以使用eval
来做,但不,这不是一个好主意。对于上面的代码,像这样做:
if ($baz[0] == '$') {
$varName = substr($baz, 1);
if (isset($$varName)) {
$baz = $$varName;
}
}
答案 1 :(得分:3)
is_string PHP函数用于检查值是否为字符串。这可以在if()语句中用于以一种方式处理字符串而在另一种方式中处理非字符串。它将返回true或false。
<?php
if (is_string(23))
{
echo "Yes";
} else {
echo "No";
}
?>
上面的代码应输出“No”,因为23不是字符串。让我们再试一次:
<?php
if (is_string("Hello World"))
{
echo "Yes";
} else {
echo "No";
}
?>
由于“Hello World”是一个字符串,因此会回显“是”。
答案 2 :(得分:1)
使用if语句检查$ variable是否为字符串..
if(is_string($var)) {
echo $var;
} else {
// What do you want to achieve here?
}
答案 3 :(得分:0)
这样的代码:
$Title = '$Foo . \'Bar\' . $Bar . \'Foo\'';
尝试打印时无法评估,它在分配时进行评估。 变量名称未被其值替换的原因是单引号。
$a = 1;
$b = 2;
$var = '$a + $b'; // this is a string
echo $var; // $a + $b
$var = "$a + $b"; // this is also a string, but variables will be processed
echo $var; // 1 + 2
请注意,在第二种情况下,它只处理变量名称,它不运行代码('+'是字符串,而不是操作)。
如果您想将'$a + $b'
作为字符串保留在$title
中并将其评估为PHP代码,那么当您打印它时,您需要使用eval功能。但是,我强烈建议尽量避免使用此功能。
答案 4 :(得分:0)
据我所知,字符串可能只是字符串或某种变量&#39; reference&#39;。 这对你有用还是总是$ if变量引用?
$var1='test';
$ref1='var1';
if(isset($$ref1)) {
// variable exists
}
else {
// no such variable
}
答案 5 :(得分:0)
您可以使用危险 eval php contruct。但是如果任何字符串来自用户输入
,则要发出警告$string = 'cup'; $name = 'coffee'; $str = 'This is a $string with my $name in it.'; echo $str. "\n"; eval("\$str = \"$str\";"); echo $str. "\n";
这只是(PHP评估文档)的复制和粘贴[http://php.net/manual/en/function.eval.php]