1

目前我有以下代码

在我的'function.php'里面是

function calcTime($database_name,$currentTime){

    global $startTime;
    global $endTime;

    ...calcutions

    return $startTime;
    return $endTime;
}//end calcTime()

在我的主要'index.php'里面我有

include('/function.php');

$databaseName = foo;

$currentTime = 12.30;

function begin($database_name,$currentTime){

    ...some calculations

    calcTime($database_name,$currentTime); //calling the function from other file

echo $startTime;

echo $endTime;

}// end begin()

我遇到的问题是在内部函数中声明的变量不会传递给外部函数。我已经声明了全局变量并返回了它们。不知道发生了什么。

不过有趣的是,如果我回显 calcTime($database_name,$currentTime); 返回 $startTime 但不返回 $endTime。

请帮忙。我有在我想以这种方式使用的其他函数中使用的函数。谢谢!!

4

3 回答 3

2

第一个问题是global在 PHP 中有点违反直觉。我知道这让我很困惑。它不会使函数内部的变量在外部可访问;相反,它允许您在函数中使用在外部声明的变量,例如:

$foo = 'hello';
function bar() {
    global $foo;
    echo $foo;
}

你想要做的是返回两个变量。但是,您只能return执行一次。一旦 PHP 到达一个return语句,它就会结束函数,所以第二个永远不会运行。

我建议做的是返回一个包含两个值的数组,例如:

return array('startTime' => $startTime, 'endTime' => $endTime);

然后,您可以使用extract再次使它们成为变量:

extract( calcTime() );
echo $startTime;
echo $endTime;
于 2012-07-14T19:17:35.377 回答
2

简单地说:调用作用域也不是global作用域......所以要让它工作,变量也必须在那里声明global。请注意,(过度)使用全局变量被认为是不好的做法,并且对于您的编码人员(甚至是您在一段时间过去后)进行调试是地狱。支持参数和返回。

** 请记住,每个函数在 php 上都是隔离的,当您在一个函数上设置全局或变量时,该函数仅在函数范围内可见

当然,您只能返回一个值,但这也可能是一个更复杂的值,例如:

return array('startTime' => $startTime,'endTime' => $endTime);
于 2012-07-14T19:13:46.397 回答
2

PHP 中的global关键字用于访问在函数外部声明的全局变量。它是写作的语法糖$var =& $GLOBALS['var']

至少有两个选项可以从函数中返回两个变量:按引用调用或返回数组:

function calcTime($database_name,$currentTime){
    return array('start' => $startTime, 'end' =>  $endTime);
}

$times = calcTime(…, …);
echo $times['start'], ' and ', $times['end'];
// or:
list($start, $end) = calcTime(…, …);
echo $start, ' and ', $end;

或者,将参数作为引用传递:

function calcTime($database_name,$currentTime, &$startTime, &$endTime){
    $startTime = …;
    $endTime = …;
}

$startTime = 0;
$endTime = 0;
calcTime(…, …, $startTime, $endTime);
echo $startTime, ' and ', $endTime;
于 2012-07-14T19:20:58.213 回答