我想知道是否有人可以帮助我。
我正在编写一些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
?
提前致谢。
更新了功能
答案 0 :(得分: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);
}
答案 1 :(得分:1)
function adminCharge($subTotal, $packagingPrice){
if(isset($packagingPrice)){
$subTotal = $subTotal + $packagingPrice;
}
return $subTotal;
}
像这样使用:
$subTotal = adminCharge($subTotal, $packagingPrice);
答案 2 :(得分: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,所以我用全局添加它。否则它将无效:)。
答案 3 :(得分:0)
您需要使用pass the variable by reference或global
选项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);
}
答案 4 :(得分:0)
您必须了解变量范围read here。
简而言之,有3种选择。
使用global
关键字:
$ a = 0;
function foo(){ 全球$ a; $ a + = 1; }
使用传递参考:
$ a = 0;
function foo(&amp; $ b){ $ b + = 1; }
FOO($ a)的
收集函数的返回值:
$ a = 0;
function foo($ b){ 返回$ b + 1; }
$ a = foo($ a);