3

在我的 PHP 网页上,我有一个全局数组:

$test = array();

然后我调用这个函数:

function f () 
{
    global $test;

    init( $test );
    $test['foo'] // Error: undefined index "foo"
}

反过来调用这个函数:

function init ( $test )
{
    $test['foo'] = 'bar';
    $test['foo'] // evaluates to'bar'
}

如您所见,我收到一个错误。我添加到内部数组中的“foo”字段init()没有保留。为什么会这样?我以为我正在改变 global $testinside init(),但似乎我没有这样做。这是怎么回事,我怎样才能在里面设置一个init()持续存在的“foo”字段?

4

3 回答 3

3

您是按值传递$testinit而不是按引用传递。内部是一个局部变量$testinit恰好包含 global 的值$test

您要么需要通过引用传递数组,通过更改init函数签名:

function init ( &$test )
{
    $test['foo'] = 'bar';
    $test['foo'] // evaluates to'bar'
}

global $test中使用init

function init ()
{
    global $test;

    $test['foo'] = 'bar';
    $test['foo'] // evaluates to'bar'
}

或者init返回数组(这意味着你需要做$test = init( $test );):

function init ( $test )
{
    $test['foo'] = 'bar';
    $test['foo'] // evaluates to'bar'

    return $test;
}
于 2012-10-30T19:18:10.300 回答
2

数组不会自动通过引用传递。所以 init $test 是数组的副本。

您要么需要通过引用传递它,例如。

function init (&$test) {

或者更好的方法是从 init 返回它。

于 2012-10-30T19:17:07.403 回答
2

如果要修改它,则必须通过引用传递变量:

function init ( &$test )
{
    $test['foo'] = 'bar';
    $test['foo'] // evaluates to'bar'
}
于 2012-10-30T19:17:27.537 回答