1

我想知道是否有人可以帮助我。

我正在编写一些 PHP 函数,我想在函数内部使用变量,然后在函数外部使用更新的变量。

例如

$subTotal += $priceToShow * $ct_qty;
adminCharge($subTotal);
function adminCharge($loggedInfoprice, $subTotal){
    if (($loggedInfoprice == 5)||($loggedInfoprice == 6)){
    $packagingCurrency = "$";
    $packagingPrice = "63";
    $packagingPricing = $packagingCurrency.$packagingPrice;
}else {
    $packagingCurrency = "£";
    $packagingPrice = "30";
    $packagingPricing = $packagingCurrency.$packagingPrice;
}
if(isset($packagingPrice)){
    $subTotal = $subTotal + $packagingPrice;
}
}

<?php echo $subTotal; ?>

echo'd$subTotal似乎只显示函数之前的值。

是否可以从函数中提取$subTotal和提取$packagingPricing

提前致谢。

更新了功能

4

5 回答 5

3
function adminCharge(&$subTotal){
// do things
}

或者

$subTotal = adminCharge($subTotal);
function adminCharge($subTotal){
 //do things
 return $subTotal;
}

在第一种情况下,您将$subTotal变量作为引用传递,因此所有更改都将反映到“外部”变量。

在第二种情况下,您传递它并返回新值,因此很容易理解为什么有效。

请注意

但是,第一个解决方案可能会导致您难以理解和调试的副作用

更新

如果要“提取”(因此返回)两个变量,可以执行以下操作

list($subTotal,$packagingPrice) = adminCharge($subTotal);
function adminCharge($subTotal){
    if(isset($packagingPrice)){
        $subTotal = $subTotal + $packagingPrice;
    }
    return array($subTotal, $packagingPrice);
}
于 2013-05-15T09:57:35.837 回答
1
function adminCharge($subTotal, $packagingPrice){
    if(isset($packagingPrice)){
        $subTotal = $subTotal + $packagingPrice;
    }

    return $subTotal;
}

像这样使用它:

$subTotal = adminCharge($subTotal, $packagingPrice);
于 2013-05-15T09:57:51.137 回答
1

你不返回任何东西,所以你可以使用全局变量,但我不推荐它.. 不过看看,因为这就是你的要求:http ://www.php.net/global

在我看来,改变你的功能:

function adminCharge($subTotal){
    global $packagingPrice
    if(isset($packagingPrice)){
         $subTotal = $subTotal + $packagingPrice;
    }
    return $subTotal; 
}

$subTotal += $priceToShow * $ct_qty;
$subTotal = adminCharge($subTotal);

另请记住,您的函数中没有 $packagingPrice ,因此我将其添加到 global. 否则它不会工作:)

于 2013-05-15T09:58:11.863 回答
0

您需要使用通过引用全局传递变量

选项1

function adminCharge(&$subTotal){
if(isset($packagingPrice)){
    $subTotal = $subTotal + $packagingPrice;
}

return array($subTotal, $packagingPrice);

}

选项 2

  function adminCharge()
  {
    global $subTotal;
    if(isset($packagingPrice))
    {
       $subTotal = $subTotal + $packagingPrice;
    }

    return  array($subTotal, $packagingPrice);

 }
于 2013-05-15T10:01:57.043 回答
0

您必须了解此处阅读的变量范围。

简而言之,有 3 个选项。

  1. 使用global关键字:

    $a = 0;

    函数 foo(){ 全局 $a; $a += 1; }

  2. 使用通过引用传递:

    $a = 0;

    函数 foo(&$b){ $b += 1; }

    富($一);

  3. 收集函数的返回值:

    $a = 0;

    函数 foo($b){ 返回 $b + 1; }

    $a = foo($a);

于 2013-05-15T10:02:09.510 回答