2017-02-22 23 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

Это связано с Changes to the handling of indirect variables, properties, and methods в PHP7, который нарушает обратную совместимость (см. Также Uniform Variable Syntax).

В частности, в PHP5 Ваш звонок интерпретируется так:

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

Однако в PHP7 ваш вызов интерпретируется так:

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

Если вы измените код на явное $object->{$attributes[0]} вы должны увидеть, как он снова работает.

 Смежные вопросы

  • Нет связанных вопросов^_^