-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非推奨になりました。
  • 呼び出し時の参照渡しは非推奨になりました。

しかし、一般的に参照による代入は非推奨ではなく、Returning Referencesは次のように述べています。

返された参照を使用するには、参照代入を使用する必要があります

于 2016-12-17T13:00:48.080 に答える