Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
全局存储值的Php调用函数不会';t返回所需的值_Php - Fatal编程技术网

全局存储值的Php调用函数不会';t返回所需的值

全局存储值的Php调用函数不会';t返回所需的值,php,Php,首先,我必须在代码中这样做,这样我就不会寻找完全“不同”的解决方案。 为什么不将我输入的值存储/返回到全局变量 编辑:我忘了把if放在一个函数中,所以不管怎样,赋值“错误”都是全局性的。 这是一个有效的 <?php $track;$cat;$title; function storeData($track, $cat, $title){ $GLOBALS['track']=$track; $GLOBALS['cat']=$cat; $GLOBALS['title'

首先,我必须在代码中这样做,这样我就不会寻找完全“不同”的解决方案。 为什么不将我输入的值存储/返回到全局变量

编辑:我忘了把if放在一个函数中,所以不管怎样,赋值“错误”都是全局性的。 这是一个有效的

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