Php 如何设置使用变量的函数不改变其在当前函数中的内容?

Php 如何设置使用变量的函数不改变其在当前函数中的内容?,php,mysql,laravel,oop,Php,Mysql,Laravel,Oop,我的函数getUser()对用户信息进行数据库选择。在这个函数中,我调用另一个名为calcPercentage()的函数,该函数从存储在$result中的数据库获取接收到的值,然后删除一些值(索引)并进行计算。完成后,第二个函数将向第一个函数返回一个值 我的问题是,第二个函数calcPercentage()中删除的值会影响从数据库接收到的原始值 参见代码 function getUser() { $result = DB::select(); // say $result = name, s

我的函数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
}


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

在调用
calcPercentage()
方法之前,clone您的结果对象

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
}

您需要使用
clone
制作对象的副本。