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

时间:2012-12-19 10:18:09

标签: php variables

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

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

6 个答案:

答案 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]