首页 > 解决方案 > 如何设置使用变量的函数不会改变其在当前函数中的内容?

问题描述

我的函数 getUser() 对用户信息进行数据库选择。在这个函数中,我调用了另一个名为 calcPercentage() 的函数,它从存储在 $result 中的数据库中获取接收到的值,然后删除一些值(索引)并进行计算。完成后,第二个函数将一个值返回给第一个函数。

我的问题是第二个函数 calcPercentage() 中删除的值正在影响从数据库接收到的原始值。

查看代码

function getUser()
{
  $result = DB::select();
// say $result = name, surname, email, telephone

  $percentage = $this->calcPercentage($result);

var_dump($result)
// now $result = name, surname
}

function calcPercentage($data)
{
 $u_data = $data;
 unset($u_data->email);
 unset($u_data->telephone);
 // the above values are not needed for the calculations,
 // thus they are being removed.

 ... do calculation
 return $percentage
 //$percentage would be = 100 || >100;
}

我想从对象中删除值而不影响函数 getUser(); 中的原始变量;预期结果。

function getUser()
{
  $result = DB::select();
// say $result = name, surname, email, telephone

  $percentage = $this->calcPercentage($result);

var_dump($result)
// now $result = name, surname, email, telephone
}

我应该在这里对数据库进行另一个查询吗?

标签: phpmysqllaraveloop

解决方案


在调用calcPercentage()方法之前,克隆你的结果对象。

function getUser(){ 
    $result = DB::select();
    // say $result = name, surname, email, telephone

    $result_copy = clone $result;
    $percentage = $this->calcPercentage(result_copy);

    var_dump($result)
    // now $result= name, surname, email, telephone
}

推荐阅读