1

这是我所拥有的:

在包含函数的文件中:

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通过函数吗?

4

6 回答 6

2

就像我上面说的,永远不要使用global. 这正是处理变量的错误方法。

我猜你想要类似的东西:

$numTrax = audioPlayer(5);

audioPlayList($user_id, $username, $numTrax);
于 2013-05-20T12:17:23.593 回答
0

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

尝试,

function audioPlayer($nT)
{
    echo ' ... all html ...';
    $numTrax = $nT;
    return $numTrax;
}
于 2013-05-20T12:10:45.733 回答
0

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

global $numTrax;

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

于 2013-05-20T12:08:36.220 回答
0

将您的功能更改为:

function audioPlayer($newNumTrax)
{
    global $numTrax;

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

    $numTrax = $newNumTrax;
}

要访问或重新分配函数中的全局变量,您需要使用global关键字将其带入范围。函数的参数应该与全局变量有不同的名称,以免混淆。然后,只需将参数变量的值分配给全局变量。

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

对于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可能不是设计程序的好策略。我建议将变量传递给函数,而不是依赖全局变量。如果你的函数太笨重,把它们分解成更小的函数。

于 2013-05-20T12:09:53.467 回答
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

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

希望这可以帮助。

于 2013-05-20T12:17:49.603 回答
0

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

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

*(完全虚构的数字,因为我没有统计数据。但要知道它太高了。:P)

于 2013-05-20T12:21:11.367 回答