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';
?>

变量变量获取变量的值并将其视为变量的名称。在上面的示例中,hello,可以通过使用两个美元符号用作变量的名称。IE

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

此时已经定义了两个变量并将其存储在 PHP 符号树中:具有内容“hello”的 $a 和具有内容“world”的 $hello。因此,此声明:

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

产生与以下完全相同的输出:

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

即他们都产生:你好世界。

为了在数组中使用可变变量,您必须解决歧义问题。也就是说,如果您编写 $$a[1] 则解析器需要知道您是否打算使用 $a[1] 作为变量,或者您是否希望 $$a 作为变量,然后是 [1] 索引那个变量。解决这种歧义的语法是:${$a[1]} 用于第一种情况,${$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 回答