从内部php函数调用变量以在外部函数中使用

时间:2012-07-14 19:08:29

标签: php nested-function

目前我有以下代码

我的'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()

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

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

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

3 个答案:

答案 0 :(得分:2)

简单地说:调用范围不是global范围......所以为了使它工作,变量还要在那里声明global 。请注意(全部)使用全局变量被认为是不好的做法,并且为你的编码人员调试(或者甚至在经过一段时间之后你)。赞成参数&回报。

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

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

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

答案 1 :(得分:2)

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

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

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

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

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

然后,您可以使用extract再次制作变量:

extract( calcTime() );
echo $startTime;
echo $endTime;

答案 2 :(得分:2)

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

至少有两个选项可以从函数中返回两个变量:call-by-ref或返回一个数组:

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;