变量不在函数之间传递

时间:2013-05-20 12:04:39

标签: php

这就是我所拥有的:

在包含文件的文件中:

global $numTrax;

然后我在html页面中调用一个函数,它只是播放器的html,但是,此时我想要输入它播放的曲目数量:

audioPlayer(5);

,功能是

function audioPlayer($numTrax)
{
    echo ' ... all html ...';

    // if i echo $numtrax here it shows 5
    // because function i used was audioPlayer(5)
    // so, i'm reassigning it using $numTrax = $numTrax
    // then next function: audioPlaylist($user_id,$username,$numTrax); has $numTrax
    // but the problem is it's not showing it there

    $numTrax = $numTrax;
    return $numTrax;
}

然后我在页面下方有另一个函数创建了轨道列表,并按如下方式调用:

audioPlaylist($user_id,$username,$numTrax);

问题是$numTrax没有通过

传播

问题我可以让变量$numTrax通过函数吗?

6 个答案:

答案 0 :(得分:2)

就像我上面说的那样,从不使用global。这是处理变量的错误方法。

我猜你想要的东西是:

$numTrax = audioPlayer(5);

audioPlayList($user_id, $username, $numTrax);

答案 1 :(得分:0)

你需要在函数中定义变量,如

global $numTrax;

使用全局变量。否则,它将创建一个具有局部范围的新变量。

答案 2 :(得分:0)

将您的功能更改为:

function audioPlayer($newNumTrax)
{
    global $numTrax;

    echo ' ... all html ...';

    $numTrax = $newNumTrax;
}

要在函数中访问或重新分配全局变量,您需要使用global关键字bring it into scope。函数的参数应该与全局变量具有不同的名称,以免使它们混淆。然后,只需将参数变量的值赋给全局变量。

按照你如何调用它,这个函数不需要返回任何东西。它只是设置全局变量的值。

对于audioPlaylist调用,没有理由将$numTrax作为参数传递。它是一个全局变量,因此所有函数都可以访问它。定义如下函数:

function audioPlaylist($user_id, $username)
{
    global $numTrax;     #now you can use the global variable in this function

    #rest of function here
}

......并且这样称呼它:

audioPlaylist($user_id, $username);

请注意,使用global可能不是设计程序的好策略。我建议将变量传递给函数而不是依赖于全局变量。如果你的功能太笨重,可以将它们分解成更小的功能。

答案 3 :(得分:0)

不要在函数中使用相同的变量

尝试,

function audioPlayer($nT)
{
    echo ' ... all html ...';
    $numTrax = $nT;
    return $numTrax;
}

答案 4 :(得分:0)

如果我猜错了,我认为你错误地使用了关键字global

中的分配$numTrax = $numTrax;
function audioPlayer($numTrax)
{
    $numTrax = $numTrax;
    return $numTrax;
}

实际上是将本地变量$numTrax的值分配给本身

您必须将全局变量定义为:

$numTrax = null ;

在您的功能中,您必须避免阴影全局重命名参数,并且声明全局变量(因此没有新的本地变量已创建),例如:

function audioPlayer($paramNumTrax)
{
    global $numTrax; // declare it exist a global var somewhere called $numTrax

    $numTrax = $paramNumTrax; // Asign the local value to the global variable
    return $paramNumTrax;
}

更多信息:http://php.net/manual/en/language.variables.scope.php

(在某些情况下可能发生:“在函数外部使用全局关键字不是错误。如果文件包含在函数内部,则可以使用它。”。不知道如果这是你的情况)

希望这有帮助。

答案 5 :(得分:0)

默认情况下,变量在PHP中不是全局变量。您必须在要使用它们的每个函数中将它们声明为,或者设置$GLOBALS['numTrax']

尽管如此,由于几个原因,依赖全局变量通常被认为是一个非常糟糕的主意。大多数涉及“远距离行动”,或依赖于现在十倍难以改变而不是编码到界面的实施细节。 (一般禁止有点过于宽泛,但在使用它们的情况下95% * 不需要全局变量。)

* (完全编号,因为我没有关于它的统计数据。但是知道它太高了。:P)