0

我反對檢查引發此錯誤:如何重新代碼PHP分配按參考使用

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

所以,我試圖找出如何重新代碼在這個類中的方法不要使用by reference或至少使用它(如果它是允許的 - 我不清楚)。

以下是使用by reference的班級部分。整個班級是heretest和棄用檢查器日誌是here

我想一些幫助重新編碼類刪除使用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; 
    } 
} 
+0

哪條線指的是錯誤? – Barmar

+0

我在代碼中的任何地方都看不到'&='。 – Barmar

+0

有幾行產生相同的錯誤。他們全部列在日誌中:https://travis-ci.org/zikula/core/jobs/184641360#L875-L878(也鏈接上面)。基本上所有帶有&的行都在其中。 – craigh

回答

1

這似乎是在貶低工具的錯誤。據Deprecated features in PHP 5.3.x

  • Assigning the return value of new by reference is now deprecated.
  • Call-time pass-by-reference is now deprecated.

但是,一般不會被棄用參考分配和Returning References說:

To use the returned reference, you must use reference assigment

+0

https://github.com/sensiolabs-de/deprecation-detector/issues/122我們會看看他們是否同意;-) – craigh