5

我有一个变量叫做$Title

变量可能包含一个字符串,

示例 A:'Foo'

但变量也可以包含对不同变量的引用,

示例 B:'$Foo'

当我使用print $Titlephp 返回 'Foo' (EX A) 或 '$Foo' (EX B) 作为字符串。

当我使用print $$Titlephp 尝试返回名为 $Foo (EX A) 或 $$Foo (EX B) 的变量的值

我想完成以下操作:当$Title仅包含一个字符串时,打印该字符串 当$Title包含对变量的引用时,查找该变量并显示其内容

我可以只查找字符串中的第一个字符。当它是 $ use echo $$TitleELSE useecho $Title时,它​​可能$Title包含如下内容:

$Title = '$Foo . \'Bar\' . $Bar . \'Foo\'';

在这种情况下$Foo,and$Bar是变量,需要这样操作,'Bar' 和 'Foo' 是字符串,需要这样操作。

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

4

6 回答 6

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解析为变量 name $$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;
    }
}
于 2012-12-19T10:26:31.490 回答
3

is_string PHP 函数用于检查值是否为字符串这可以在 if () 语句中使用,以一种方式处理字符串,以另一种方式处理非字符串。它将返回真或假。

 <?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”是一个字符串,这将回显“Yes”。

于 2012-12-19T10:26:15.110 回答
1

使用 if 语句检查 $variable 是否为字符串。

if(is_string($var)) { 
   echo $var; 
} else { 
  // What do you want  to achieve here?
} 
于 2012-12-19T10:23:33.827 回答
0

Code like this:

$Title = '$Foo . \'Bar\' . $Bar . \'Foo\'';

can't be evaluated when you try to print it, it's evaluated at the moment of assignment. The reason variable names are not being replaced by their values in your case are single quotes.

$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

Note, that in second scenario it only processes the variable names, it doesn't run the code ('+' is a string, not an operation).

If you want to keep the '$a + $b' as a string within your $title and evaluate it as a PHP code at the moment, when you print it, you need to use eval function. However, I strongly suggest trying to avoid using this function as much as possible.

于 2012-12-19T10:26:57.107 回答
0

您可以使用危险的eval php 结构。但如果任何字符串来自用户输入,请注意

 
$string = '杯子';
$name = '咖啡';
$str = '这是一个包含我的 $name 的 $string。';
回声 $str。"\n";
eval("\$str = \"$str\";");
回声 $str。"\n";

这只是来自(PHP eval 文档)[http://php.net/manual/en/function.eval.php] 的复制和粘贴

于 2012-12-19T10:34:16.690 回答
0

据我所知,字符串可能只是字符串或某种变量“引用”。这对你有用还是总是有 $ if 变量引用?

$var1='test';
$ref1='var1';

if(isset($$ref1)) {
    // variable exists
}
else {
    // no such variable
}
于 2012-12-19T10:34:07.450 回答