全局存储值的Php调用函数不会';t返回所需的值
首先,我必须在代码中这样做,这样我就不会寻找完全“不同”的解决方案。 为什么不将我输入的值存储/返回到全局变量 编辑:我忘了把if放在一个函数中,所以不管怎样,赋值“错误”都是全局性的。 这是一个有效的全局存储值的Php调用函数不会';t返回所需的值,php,Php,首先,我必须在代码中这样做,这样我就不会寻找完全“不同”的解决方案。 为什么不将我输入的值存储/返回到全局变量 编辑:我忘了把if放在一个函数中,所以不管怎样,赋值“错误”都是全局性的。 这是一个有效的 <?php $track;$cat;$title; function storeData($track, $cat, $title){ $GLOBALS['track']=$track; $GLOBALS['cat']=$cat; $GLOBALS['title'
<?php
$track;$cat;$title;
function storeData($track, $cat, $title){
$GLOBALS['track']=$track;
$GLOBALS['cat']=$cat;
$GLOBALS['title']=$title;
print 'inside function:';
print $GLOBALS['track'];
print $GLOBALS['cat'];
print $GLOBALS['title'];
return array($GLOBALS['track'],$GLOBALS['cat'],$GLOBALS['title']);
}
function getData($track, $cat, $title){
return array('track'=>$GLOBALS['track'],'cat'=>$GLOBALS['cat'],'title'=>$GLOBALS['title']);
}
$a=1;
if ($a==1) {
test($a);
}
function test($a){
$track='correct track ';
$cat='correct cat ';
$title='correct title ';
storeData($track, $cat, $title);
print 'storing this data:';
print $track;
print $cat;
print $title;
$cat='wrong'; $track='wrong'; $title='wrong';
$getting=getData();
$t=$getting['track'];
$c=$getting['cat'];
$e=$getting['title'];
print 'reading back this data:';
print $t;
print $c;
print $e;
}
?>
从函数返回数组时,应使用返回的$GLOBALS值返回局部变量。像这样
$cat='wrong'; $track='wrong'; $title='wrong';
$returned_array = getData($track, $cat, $title);//read global var
$track = $returned_array[0];
$cat = $returned_array[1];
$title = $returned_array[2];
// then you print these variables
print 'reading back this data:';
print $track;
print $cat;
print $title;
这是因为您没有保存函数getData返回的变量
$cat='wrong'; $track='wrong'; $title='wrong';
getData($track, $cat, $title);
print 'reading back this data:';
print $track;
print $cat;
print $title;
您只是调用函数,但没有保存它返回的变量。您的函数
getData()
返回一个数组,但从未使用返回的值,该值包含正确的数据。在这种情况下,您实际上根本不需要参数:
function getData()
{
return [
$GLOBALS['track'],
$GLOBALS['cat'],
$GLOBALS['title']
];
}
$data = getData();
$track = $data[0];
$cat = $data[1];
$title = $data[2];
或用于更整洁的任务:
list($track, $cat, $title) = getData();
但是,如果希望函数本身分配给变量,请注意PHP函数在默认情况下是按值传递的。因此,当您传递参数时,您传递的是其值的副本。要通过引用传递,可以执行以下操作:
function getData(&$track, &$cat, &$title)
{
$track = $GLOBALS['track'];
$cat = $GLOBALS['cat'];
$title = $GLOBALS['title'];
}
getData($track, $cat, $title);
这将修改变量。哦,等等,我想覆盖getData中当前的$track、$cat、$title值来打印它。@RizkiHadiaturrasyid,在这里查看我的答案。@HimanshuUpadhyay他已经被自动通知你的答案已发布,你不需要自己做。@sidyll,感谢您的通知。出于某种原因,它打印为空白(在“读回此数据:”)@RizkiHadiaturrasyid,我已更新了我的答案。谢谢你指出这一点,西迪尔。
function getData(&$track, &$cat, &$title)
{
$track = $GLOBALS['track'];
$cat = $GLOBALS['cat'];
$title = $GLOBALS['title'];
}
getData($track, $cat, $title);