You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PHP第二个函数中调用第一个函数的$r变量

解决方案:提取$r计算逻辑为可复用函数

你的问题核心是变量作用域隔离:第一个代码块中的$r是局部变量,无法被第二个代码块直接访问。解决思路是将计算$r的逻辑封装成独立函数,在需要的地方调用该函数获取$r的值,同时实现代码复用。

步骤1:封装计算$r的函数

将第一个代码块中计算$r的逻辑抽离为独立函数,接收计算所需的参数(发动机排量$eng和车辆价格$a):

function calculateBasicPremium($eng, $a) {
    // 定义计算常量
    $z = .02034;
    $p = .01809;
    $q = .01779;
    $qr = .01737;

    $sma = 7325;
    $mid = 11975;
    $lar = 27930;

    $r = 0;
    if ($eng < 1000) {
        $r = ($z * $a) + $sma;
    } elseif ($eng >= 1000 && $eng < 1500) {
        $r = ($p * $a) + $mid;
    } elseif ($eng >= 1500 && $a < 1900000) {
        $r = ($q * $a) + $lar;
    } elseif ($eng >= 1500 && $a > 1900000) {
        $r = ($qr * $a) + $lar;
    }
    return $r;
}

步骤2:修改第一个代码块

替换原有的$r计算逻辑,调用封装好的函数:

if($NewCarVariantDetail){  
    $db = JFactory::getDBO();   
    $query = $db->getQuery(true);
    $query->select($db->qn(array('id','v_price','v_fuel_type','v_capacity')))
              ->from($db->qn('#__newprod_variants'))
               ->where([$db->qn('state') . ' = 1',
        $db->qn('id') . ' = ' . (int)$NewCarVariantDetail])
        ->order('v_price/2 asc','v_fuel_type desc');
    $db->setQuery($query);    
    $rows = $db->loadObject();
    $a = $rows->v_price;
    $b = $rows->v_fuel_type;
    $eng = $rows->v_capacity;

    // 调用函数获取$r
    $r = calculateBasicPremium($eng, $a);

    $list='                                        
                <div class="common-box">
                    <div class="common-box-left">Basic Prem</div>
                    <div class="common-box-right">
                        <input name="voluntary_excess" type="text" class="text-box"  value="Rs. '.(round($r)) .'" readonly=""/>
                    </div>
                </div>
                ';  
    die($list);
}

步骤3:修改第二个代码块

同样调用封装函数获取$r,用于后续计算:

if($RtoDetail){  
    $db = JFactory::getDBO();   
    $query = $db->getQuery(true);
    $query->select($db->qn(array('id','v_price','v_fuel_type','v_capacity')))
              ->from($db->qn('#__newprod_variants'))
               ->where([$db->qn('state') . ' = 1',
                $db->qn('id') . ' = ' . (int)$RtoDetail]);
    $db->setQuery($query);    
    $rows = $db->loadObject();
    $a = $rows->v_price;
    $b = trim($rows->v_fuel_type);
    $eng = $rows->v_capacity;
    $calculatedtax = '';

    if (($a < 400000) && ($b == 'Petrol')) {           
        $calculatedtax = (.04*$a);
    } elseif(($a >= 400000 && $a < 600000) && ($b == 'Petrol')) {           
        $calculatedtax = (.05*$a);
    } elseif(($a >= 600000 && $a < 1000000) && ($b == 'Petrol')) {           
        $calculatedtax = (.07*$a);                  
    } elseif(($a >= 1000000) && ($b == 'Petrol')) {           
        $calculatedtax = (.10*$a);
    }   

    // 调用函数获取$r
    $r = calculateBasicPremium($eng, $a);

    $list='         
                <h2><u> Fees </u></h2>                
                <div class="common-box">
                    <div class="common-box-left">Total Fee </div>
                    <div class="common-box-right">
                        <input name="roadtax" type="text" class="text-box"  value="Rs. '.(round($calculatedtax)) .'" readonly=""/>
                    </div>
                </div>

                <div class="common-box">
                    <div class="common-box-left">Basic Prem</div>
                    <div class="common-box-right">
                        <input name="voluntary_excess" type="text" class="text-box"  value="Rs. '.(round($r)) .'" readonly=""/>
                    </div>
                </div>

                    
                                <div class="common-box">
                    <div class="common-box-left">Final Price </div>
                     <div class="common-box-right">
                    <input name="reg" type="text" class="text-box"  value="Rs. '.((round($a+ $calculatedtax + $r))) .'" readonly=""/>
                   
                    </div>
                </div>                                  
                ';  
    die($list);
}           

额外说明

  • 如果两段代码位于不同文件中,需要将封装的calculateBasicPremium函数放在公共文件中,在两个文件顶部通过require或include引入公共文件。
  • 后续若需调整$r的计算逻辑,只需修改这一个函数即可,无需改动多处代码,提升维护效率。

内容的提问来源于stack exchange,提问作者Ruchika

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 19:20:45