访问除返回值以外的函数中的变量

时间:2011-03-21 12:50:40

标签: php function variables

我需要帮助才能理解我面临的这个问题......如果它看起来很傻就道歉。

我写了一个函数,根据两个不同的日期(到达和离开)进行一些计算。一切正常,给出了返回值,这是正确的。

然而,在进行此计算时,我想在函数外部使用(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;

}     

赞赏任何理解这一点的帮助。 弗朗西斯

6 个答案:

答案 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,但你绝对可以将它们分成不同的函数,这样你就不会用全局变量做一些奇怪的东西并弄乱你的命名空间。