使用 eval 打印数组值
Using eval to print an array value
$cars = array
(
array("Volvo",22,18),
array("BMW",15,13),
array("Saab",5,2),
array("Land Rover",17,15)
);
$key = '[1][0]';
$str = '$cars'.$key;
echo $str."\n";
eval($str);
输出:
$cars[1][0]
PHP Parse error: syntax error, unexpected end of file in ... : eval()'d code on line 1
我期待它打印值,即 BMW
让我们从明显的“when is eval evil in php?”开始,我假设您知道。
您的错误有多种原因。首先,您正在执行的代码如下(您在打印时知道):
$cars[0][1]
就像这不会在原始 PHP (<?php $foo; ?>
) 中做任何事情一样,它在 eval
语句中也不会做任何事情(我添加了一个 echo
在我的代码中解决这个问题)。其次,您忘记了语句末尾的分号(与任何 PHP)一样。
因此,正确的说法应该是这样的:
<?php
$cars = array
(
array("Volvo",22,18),
array("BMW",15,13),
array("Saab",5,2),
array("Land Rover",17,15)
);
$key = '[1][0]';
$str = 'echo $cars' .$key . ';'; // "echo $cars[0][1];"
echo $str."\n";
eval($str); // will echo "BMW"
如果您希望将值返回到变量中,请使用 return
:
<?php
$cars = array
(
array("Volvo",22,18),
array("BMW",15,13),
array("Saab",5,2),
array("Land Rover",17,15)
);
$key = '[1][0]';
$str = 'return $cars' .$key . ';'; // "return $cars[0][1];"
echo $str."\n";
$var = eval($str);
var_dump($var); //string(3) "BMW"
$cars = array
(
array("Volvo",22,18),
array("BMW",15,13),
array("Saab",5,2),
array("Land Rover",17,15)
);
$key = '[1][0]';
$str = '$cars'.$key;
echo $str."\n";
eval($str);
输出:
$cars[1][0]
PHP Parse error: syntax error, unexpected end of file in ... : eval()'d code on line 1
我期待它打印值,即 BMW
让我们从明显的“when is eval evil in php?”开始,我假设您知道。
您的错误有多种原因。首先,您正在执行的代码如下(您在打印时知道):
$cars[0][1]
就像这不会在原始 PHP (<?php $foo; ?>
) 中做任何事情一样,它在 eval
语句中也不会做任何事情(我添加了一个 echo
在我的代码中解决这个问题)。其次,您忘记了语句末尾的分号(与任何 PHP)一样。
因此,正确的说法应该是这样的:
<?php
$cars = array
(
array("Volvo",22,18),
array("BMW",15,13),
array("Saab",5,2),
array("Land Rover",17,15)
);
$key = '[1][0]';
$str = 'echo $cars' .$key . ';'; // "echo $cars[0][1];"
echo $str."\n";
eval($str); // will echo "BMW"
如果您希望将值返回到变量中,请使用 return
:
<?php
$cars = array
(
array("Volvo",22,18),
array("BMW",15,13),
array("Saab",5,2),
array("Land Rover",17,15)
);
$key = '[1][0]';
$str = 'return $cars' .$key . ';'; // "return $cars[0][1];"
echo $str."\n";
$var = eval($str);
var_dump($var); //string(3) "BMW"