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

时间:2017-10-30 18:11:35

标签: php

对于初学者,我必须在我的代码中这样做,所以我不是在寻找一个完全不同的'解。 为什么这不存储/返回我输入的值到全局变量?

编辑:我忘了把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;
}
?>

输出:

inside function:correct track correct cat correct title 
storing this data:correct track correct cat correct title 
reading back this data:correct track correct cat correct title 

3 个答案:

答案 0 :(得分:1)

从函数返回数组时,应该返回带有返回的$ 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;

答案 1 :(得分:1)

您的函数getData()返回一个数组,但您从未使用过返回的值,这是包含正确数据的值。在这种情况下,你实际上根本不需要参数:

function getData()
{
    return [
        $GLOBALS['track'],
        $GLOBALS['cat'],
        $GLOBALS['title']
    ];
}

$data = getData();

$track = $data[0];
$cat   = $data[1];
$title = $data[2];

或使用list()进行更简洁的作业:

list($track, $cat, $title) = getData();

但是,如果您希望函数自己分配给变量,请注意默认情况下PHP函数是按值传递的。因此,当您传递参数时,您将传递其值的副本。要通过引用传递,您可以执行以下操作:

function getData(&$track, &$cat, &$title)
{
    $track = $GLOBALS['track'];
    $cat   = $GLOBALS['cat'];
    $title = $GLOBALS['title'];
}

getData($track, $cat, $title);

这将修改变量。

答案 2 :(得分:0)

这是因为你没有保存函数getData返回的变量。

$cat='wrong'; $track='wrong'; $title='wrong';
getData($track, $cat, $title);
print 'reading back this data:';
print $track;
print $cat;
print $title;

您只是调用函数但不保存它返回的变量。