我需要帮助才能理解我面临的这个问题......如果它看起来很傻就道歉。
我写了一个函数,根据两个不同的日期(到达和离开)进行一些计算。一切正常,给出了返回值,这是正确的。
然而,在进行此计算时,我想在函数外部使用(echo)创建变量($ days)。我试图让它全球化但我得到一个错误......猜测我走错了路线!
所以我的问题是如何在函数内部获取除返回值之外的值?如果它当然是可能的。
以下代码:
function costs($date1, $date2, $price) {
$arr= explode("/", $date1);
$timestamp1 = mktime(0,0,0,$arr[1],$arr[0],$arr[2]);
$arr2= explode("/", $date2);
$timestamp2 = mktime(0,0,0,$arr2[1],$arr2[0],$arr2[2]);
$timestamp = $timestamp2 - $timestamp1;
$days = $timestamp/86400;
$cost = $days * $price;
return $cost;
}
赞赏任何理解这一点的帮助。 弗朗西斯
答案 0 :(得分:0)
具体到你的代码......试试这个
function costs($date1, $date2, $price) {
$arr= explode("/", $date1);
$timestamp1 = mktime(0,0,0,$arr[1],$arr[0],$arr[2]);
$arr2= explode("/", $date2);
$timestamp2 = mktime(0,0,0,$arr2[1],$arr2[0],$arr2[2]);
$timestamp = $timestamp2 - $timestamp1;
$days = $timestamp/86400;
$cost = $days * $price;
$arr = array();
$arr['cost'] = $cost;
$arr['days'] = $days;
return $arr;
}
答案 1 :(得分:0)
你可以将它包装在课堂上,这样你就可以访问$ days ..
`
class Something {
public $days;
public function calc($arrival, $departure)
{
// Do your thing
$this -> days = $days;
return $something;
}
public function getDays()
{
return $this -> days;
}
}
`
答案 2 :(得分:0)
在您的函数中,包含可选参数。如果设置了此项,则返回日期/而不是差异。
<?php
function fn($arrival, $departure, $getDate = FALSE)
{
//your function stuff
...
//if optional flag is set, then return number of days.
if($getDate)
{
return $days;
}
//if flag not set, then return original value.
return $values;
}
答案 3 :(得分:0)
如果您有该函数返回的$ cost值,并且您知道在调用它时传入函数的$ price值;那么
$days = $cost / $price;
答案 4 :(得分:0)
从函数返回数组,或通过参数将对目标的引用发送到函数中。
list ($cost, $return_days)=costs("01/03/2011", "17/03/2011", 100, $ref_days);
// $ref_days and $return_days now hold the same value
function costs($date1, $date2, $price, &$days) {
...
$days = $timestamp/86400;
$cost = $days * $price;
return array($cost,$days);
}
答案 5 :(得分:-1)
这些应该是两个独立的功能,一个使用另一个。
function costs($date1, $date2, $price) {
$cost = days($date1, $date2) * $price;
return $cost;
}
function days($date1, $date2) {
$arr= explode("/", $date1);
$timestamp1 = mktime(0,0,0,$arr[1],$arr[0],$arr[2]);
$arr2= explode("/", $date2);
$timestamp2 = mktime(0,0,0,$arr2[1],$arr2[0],$arr2[2]);
$timestamp = $timestamp2 - $timestamp1;
return $timestamp/86400;
}
编辑:然后您可以根据需要调用任一功能,而无需复制代码。
看起来你不是在使用对象,所以我不会给你OO spiel,但你绝对可以将它们分成不同的函数,这样你就不会用全局变量做一些奇怪的东西并弄乱你的命名空间。