1

私はphpコードを持っています:

$rand = rand(1,5);

次のような rand 関数の名前を持つ var を定義したいと思います。

$$rand // if $rand= 1 then the var will be $1

そして、する

switch($rand){
case(1):
$$rand = 'How many legs dog has ?';
$ans= '4';      }

コードは、セキュリティの質問を定義するためのものです。誰かが私の考えを理解してくれることを願っています。どうすればできますか?

4

3 に答える 3

3

可変変数名を持つことができると便利な場合があります。つまり、動的に設定して使用できる変数名です。通常の変数は、次のようなステートメントで設定されます。

<?php
$a = 'hello';
?>

可変変数は、変数の値を取り、それを変数の名前として扱います。上記の例では、2 つのドル記号を使用することで変数の名前として hello を使用できます。すなわち

<?php
$$a = 'world';
?>

この時点で、2 つの変数が定義され、PHP シンボル ツリーに格納されています。内容が「hello」の $a と、内容が「world」の $hello です。したがって、このステートメント:

<?php
echo "$a ${$a}";
?>

以下とまったく同じ出力を生成します。

<?php
echo "$a $hello";
?>

つまり、どちらも hello world を生成します。

可変変数を配列で使用するには、あいまいさの問題を解決する必要があります。つまり、$$a[1] と記述した場合、パーサーは、$a[1] を変数として使用するつもりだったのか、それとも変数として $$a を使用してから [1] インデックスを使用したかったのかを認識する必要があります。その変数。このあいまいさを解決するための構文は、最初のケースでは ${$a[1]}、2 番目のケースでは ${$a}[1] です。

クラス プロパティには、変数プロパティ名を使用してアクセスすることもできます。変数のプロパティ名は、呼び出し元のスコープ内で解決されます。たとえば、$foo->$bar などの式がある場合、ローカル スコープで $bar が検査され、その値が $foo のプロパティの名前として使用されます。これは、$bar が配列アクセスの場合にも当てはまります。

于 2013-05-17T11:29:04.707 に答える
1
// Sanitize the arrays
$questions = array();
$answers = array();

// Build some questions and assign to the questions array
$questions[0] = 'How many legs does a dog have?';
$questions[1] = 'How many eyes does a human have?';
$questions[2] = 'How many legs does a spider have?';


// Add the answers, making sure the array index is the same as the questions array
$answers[0] = 4;
$answers[1] = 2;
$answers[2] = 8;


// Select a question to use
$questionId = rand(0, count($questions));


// Output the question and answer
echo 'questions: ' . $questions[$questionId];
echo 'answer: ' . $answers[$questionId];

PHP の変数は数字で始めることはできません。

于 2013-05-17T11:31:12.343 に答える
0

${$rand} が正しい方法です。ただし、変数名を数字で始めることはできないことに注意してください。

PHPマニュアルを引用:

変数名は、PHP の他のラベルと同じ規則に従います。有効な変数名は、文字またはアンダースコアで始まり、任意の数の文字、数字、またはアンダースコアが続きます。正規表現としては、次のように表現されます: '[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'

于 2013-05-17T11:28:29.997 に答える