目前我有以下代码
我的'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。
请帮忙。我有其他函数使用的功能,我想以这种方式使用。谢谢!!
答案 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;