【问题标题】:How can I set that the function using the variable does not alter its content in current function? [duplicate]如何设置使用变量的函数不会改变其在当前函数中的内容? [复制]
【发布时间】:2023-03-20 01:45:01
【问题描述】:

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

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

【问题讨论】:

  • 您需要使用clone 来复制您的对象。

标签: php mysql laravel oop


【解决方案1】:

在调用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
}

【讨论】:

    猜你喜欢
    • 2013-02-23
    • 1970-01-01
    • 1970-01-01
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-30
    • 1970-01-01
    相关资源
    最近更新 更多