2012-07-14 77 views
1

目前我有以下代码从内PHP函数调用的变量在外部函数使用

我“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。

请帮忙。我有一些函数用于我希望以这种方式使用的其他函数。谢谢!!

+0

我不是PHP'global'的专家,但至少我知道你不必返回什么是全局的,或者不必设置全局的,你返回的是什么。我认为**(这是我不确定的地方),当你在一个函数中使用它之前,你有一个已经存在于外部代码**中的变量时使用'global'。但是在你的代码中,$ startTime在函数调用之前不会被使用**。只需使用'list($ startTime,$ endTime)= calcTime($ database_name,$ currentTime);'并移除这两个'global'命令。当然,将两个'return'更改为'return array($ startTime,$ endTime);' – Aufziehvogel 2012-07-14 19:12:56

+0

您只能从函数返回一次。但是,您可能会返回一组值或一个对象。 – knittl 2012-07-14 19:14:26

回答

2

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

至少有两个选项是如何,你可以从你的函数返回的两个变量:调用 - 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; 
+0

完美,谢谢你的解释。 – 2012-07-14 21:53:16

2

简单地说:主叫范围不global范围要么...所以为它工作,变量会已经被宣布global那里。请注意(全部)使用全局变量被认为是不好的做法,并且会为你的同伴调试器(或者甚至在你经过一段时间后)进行调试。好评参数&返回。

**记住每一个功能被隔离在PHP,当你设置一个功能,这将是可见的只有功能范围当然

的全局或变量,你只能返回一个值,但该很可能会成为一个更复杂的一个,如:

return array('startTime' => $startTime,'endTime' => $endTime); 
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; 
+0

感谢您使用全局变量解释问题。我不知道。在函数中声明一个全局变量或通过函数传递变量之间有什么区别?例如,在上面的例子中,为什么不只是功能栏($ foo)?这样做还是有利于这样做? – 2012-07-14 21:51:21

+0

更少的全局变得更好。如果你可以传递一个变量作为参数,那么做。 – knittl 2012-07-15 10:01:03