5

私はという変数を持っています$Title

変数に文字列が含まれている可能性があります。

例A:'Foo'

ただし、変数には別の変数への参照を含めることもできます。

例B:'$ Foo'

phpを使用するprint $Titleと、文字列として「Foo」(EX A)または「$ Foo」(EX B)が返されます。

phpを使用するprint $$Titleと、$ Foo(EX A)または$$ Foo(EX B)という名前の変数の値を返そうとします

次のことを実行したい:文字列のみが含まれている$Title場合は、その文字列$Titleを出力する変数への参照が含まれている場合は、その変数を検索してその内容を表示する

文字列の最初の文字を探すことができました。$ use echo $$TitleELSE useの場合、次のようなものが含まれてecho $Titleいる可能性があります。$Title

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

その場合$Foo、と$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$$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()ステートメント内で使用して、ある方法で文字列を処理し、別の方法で非文字列を処理することができます。trueまたはfalseを返します。

 <?php 
 if (is_string(23)) 
 {
 echo "Yes";
 } else {
 echo "No";
 }
 ?>

23は文字列ではないため、上記のコードは「No」を出力するはずです。これをもう一度試してみましょう:

 <?php 
 if (is_string("Hello World")) 
 {
 echo "Yes";
 } else {
 echo "No";
 }
 ?>

「HelloWorld」は文字列であるため、これは「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

このようなコード:

$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

2番目のシナリオでは、変数名のみを処理し、コードは実行しないことに注意してください(「+」は文字列であり、操作ではありません)。

'$a + $b'を文字列として保持し、現時点で$title PHPコードとして評価する場合は、出力時にeval関数を使用する必要があります。ただし、この関数はできるだけ使用しないようにすることを強くお勧めします。

于 2012-12-19T10:26:57.107 に答える
0

私が理解できるように、文字列は単なる文字列またはある種の変数「参照」である可能性があります。これはあなたのために機能しますか、それとも変数参照の場合は常に$がありますか?

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

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

危険なevalphp構造を使用できます。ただし、文字列のいずれかがユーザー入力からのものである場合は注意が必要です

 
$ string='カップ';
$ name='コーヒー';
$ str='これは$nameが含まれる$stringです。';
エコー$str。"\ n";
eval( "\ $ str = \" $ str \ ";");
エコー$str。"\ n";

これは、(PHP評価ドキュメント)[http://php.net/manual/en/function.eval.php]からのコピーアンドペーストです。

于 2012-12-19T10:34:16.690 に答える