2017-02-22 6 views
0

j'ai utilisé la méthode suivante en PHP 5.6 qui a toujours fonctionné très bienPHP7 méthode magique override __get ne fonctionne plus

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 
      } 
     } 

Maintenant, nous avons amélioré le serveur à PHP7 et lorsqu'un script appelle get-méthode avec un tableau, Je reçois une erreur

$object->$attributes[0] 

classname.Array n'est pas défini

Toutes les idées?

+1

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

Répondre

0

Ceci est dû au Changes to the handling of indirect variables, properties, and methods dans PHP7 qui rompt la rétrocompatibilité (voir aussi Uniform Variable Syntax).

Plus précisément, dans PHP5 votre appel est interprété comme ceci:

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

Cependant, PHP7 votre appel est interprété comme ceci:

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

Si vous vous modifiez votre code à un explicite $object->{$attributes[0]} vous devriez le voir fonctionner comme prévu.