从PHP5升级到PHP7后返回NULL的PHP动态变量
我正试图修复我的一个旧网站,目前不工作。我已将问题简化为以下代码:从PHP5升级到PHP7后返回NULL的PHP动态变量,php,variables,Php,Variables,我正试图修复我的一个旧网站,目前不工作。我已将问题简化为以下代码: <?php global $options; foreach ( $options as $value ) { if ( isset( $value['id'] ) ) { var_dump($value); $test = $value['id']; if ( get_option( $value['id'] ) === FALSE ) { $$value['id'
<?php
global $options;
foreach ( $options as $value ) {
if ( isset( $value['id'] ) ) {
var_dump($value);
$test = $value['id'];
if ( get_option( $value['id'] ) === FALSE ) {
$$value['id'] = $value['std'];
} else {
$$value['id'] = get_option( $value['id'] );
}
var_dump($$value['id']); // returns "Boxed"
var_dump($$test); // return NULL
break;
}
}
?>
我不明白的是:输出$$value['id']如何工作,但首先将该值赋给$test=$value['id']会导致$$test不工作
旧网站的PHP版本非常旧(您需要将
$$value['id']
替换为${$value['id']}
)
这是因为:
- 如果$value是一个字符串,如“cheese”,那么动态变量将解析为
,即,您将寻找一个名为$cheese['id']
的数组,其键为$cheese
id
- 如果$value是一个数组,如
,就像您的例子一样,那么动态变量将解析为['id'=>'celta_type']
$celta_type
顺便说一句,如果我是你,我不会使用动态变量,因为它们是不安全和不可预测的。你可以重写你的函数以使用数组,如下所示:
$optionValues[$value['id']] = get_option($value['id']);
if ($optionValues[$value['id']] === false)
$optionValues[$value['id']] = $value['std'];
或
语法错误$test!=$$test你能再解释一下吗?谢谢你的详细回答。这很有意义
$optionValues[$value['id']] = get_option($value['id']);
if ($optionValues[$value['id']] === false)
$optionValues[$value['id']] = $value['std'];
$optionValues[$value['id']] = get_option($value['id']) === false ? $value['std'] : get_option($value['id']);