-1

我的弃用检查器抛出此错误:

Using deprecated language feature assign by reference(&=) Since PHP 5.3 use normal assignment instead.

因此,我试图弄清楚如何重新编码此类中的方法以不使用by reference或至少正确使用它(如果完全允许的话-我也不清楚)。

下面是使用by reference. 整个课程都在这里测试和弃用检查器日志在这里

我想要一些帮助重新编码类以删除使用by reference

class ParameterBag
{
    /**
     * Sets value.
     *   can use 'key' = ['subkey' => value, 'subkey2' => value2]
     *      or
     *   'key.subkey' = value
     *   'key.subkey2' = value2
     *
     * @param $key
     * @param $value
     */
    public function set($key, $value)
    {
        $parameters = &$this->resolvePath($key, true);
        $key = $this->resolveKey($key);
        $parameters[$key] = $value;
    }

    /**
     * Resolves a path in parameters property and returns it as a reference.
     *
     * This method allows structured namespacing of parameters.
     *
     * @param string  $key         Key name
     * @param boolean $writeContext Write context, default false
     *
     * @return array
     */
    private function &resolvePath($key, $writeContext = false)
    {
        $array = &$this->parameters;
        $key = (strpos($key, $this->ns) === 0) ? substr($key, 1) : $key;

        // Check if there is anything to do, else return
        if (!$key) {
            return $array;
        }

        $parts = explode($this->ns, $key);
        if (count($parts) < 2) {
            if (!$writeContext) {
                return $array;
            }

            $array[$parts[0]] = [];

            return $array;
        }

        unset($parts[count($parts) - 1]);

        foreach ($parts as $part) {
            if (!array_key_exists($part, $array)) {
                if (!$writeContext) {
                    return $array;
                }

                $array[$part] = [];
            }

            $array = &$array[$part];
        }

        return $array;
    }
}
4

1 回答 1

1

这似乎是弃用工具中的一个错误。根据PHP 5.3.x 中已弃用的功能

  • new现在不推荐通过引用分配返回值。
  • 现在不推荐使用调用时传递引用。

但是一般不推荐通过引用分配,并且返回引用说:

要使用返回的引用,您必须使用引用分配

于 2016-12-17T13:00:48.080 回答