2017-02-22 78 views
0

我使用PHP 5.6以下的方法,它總是能正常工作PHP7覆蓋魔術方法__get不工作了

public function __get($name){ 

      if(!empty($this->_dynamicFields[$name])){ 
       if(!empty($this->_dynamicData[$name])){ 
        return $this->_dynamicData[$name]; 
       }else{ 
        return null; 
       } 
      }else{ 
       return parent::__get($name); // That's where the error happens when an array is called in $name 
      } 
     } 

現在,我們升級了服務器PHP7,當一個腳本調用GET-方法有一個數組,我得到

$object->$attributes[0] 

classname.Array沒有定義

任何想法的錯誤?

+1

https://wiki.php.net/rfc/uniform_variable_syntax –

回答

0

這是由於PHP7中的Changes to the handling of indirect variables, properties, and methods,它打破了向後兼容性(另請參閱Uniform Variable Syntax)。

具體來說,在PHP5您的通話這樣解釋:

$object->$attributes[0] === $object->{$attributes[0]} 

然而,在PHP7您的通話這樣解釋:

$object->$attributes[0] === ($object->$attributes)[0] 

如果您修改代碼以明確$object->{$attributes[0]}你應該看到它再次按預期工作。