2017-02-22 10 views
0

を働いていない__get私はいつもPHP7オーバーライド魔法の方法はもう

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

罰金を働いたPHP 5.6で、次の方法を使用今、私たちはPHP7にサーバーをアップグレードし、スクリプトが配列で取得するメソッドを呼び出したとき私は

$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も参照)。もしあなたが明示的にコードを変更した場合

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

$object->{$attributes[0]}:具体的には、PHP5であなたのコールは、次のように解釈され

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

はしかし、PHP7にあなたのコールは、次のように解釈されます期待どおりに再び動作するはずです。

関連する問題