结合两个 PHP 函数的问题

问题描述

我正在尝试将两个函数合并为一个函数,但遇到的困难比我预期的要大。我已经包含了两个单独的函数以及我尝试将它们组合在一起的版本。变量 requestData 保存我正在迭代的对象。但是,在我的组合版本中,我不断收到致命错误 Call to undefined method 在具有 $this->requestData($value) 的行上。

我觉得我错过了一些简单的东西,所以为新手问题道歉。预先感谢您的任何帮助!

功能#1:

public function iterateRequestKeys($array)
    {
        foreach ($array as $key => $value)
            {
                if (is_object($value))
                    {
                        $this->iterateRequestKeys($value);
                    }
                else
                    {
                        $updated_value = '1234';
                        $array->$key = $updated_value;
                    }   
            }
    }

功能#2:

public function requestFindReplace($resourceID,$requestData)
    {
        $this->iterateRequestKeys($requestData);    
    }

组合:

public function requestFindReplace($resourceID,$requestData)
    {
        foreach ($requestData as $key => $value)
            {
                if (is_object($value))
                    {
                        $this->requestData($value);
                    }
                else
                    {
                        $updated_value = '123';
                        $array->$key = $updated_value;
                    }   
            }   
    }

解决方法

看起来您正在递归调用 requestFindReplace(),因此您希望将其更改为 $this->requestFindReplace($resourceID,$value);

public function requestFindReplace($resourceID,$requestData)
{
    foreach ($requestData as $key => $value)
    {
        if (is_object($value))
        {
            $this->requestFindReplace($resourceID,$value);
        }
        else
        {
            $updated_value = '123';
            $array->$key = $updated_value;
        }   
    }   
}
,

您的组合功能似乎存在一些问题。简而言之...

  1. 您没有调用递归函数,也没有通过(第 7 行)传递参数
  2. 你也没有通过引用传递(我相信你可能需要用数组来做,不完全确定我是一个但对 PHP 生疏)。 (第 1 行)
  3. 您正在尝试更新不存在的 $array(第 12 行)

试试这个代码:

public function requestFindReplace($resourceID,&$requestData)
    {
        foreach ($requestData as $key => $value)
            {
                if (is_object($value))
                    {
                        $this->requestFindReplace($resourceID,$value);
                    }
                else
                    {
                        $updated_value = '123';
                        $requestData->$key = $updated_value;
                    }   
            }   
    }