2016-12-16 17 views
1

PHP 5.6から7.0にswithchingするとき。私はこのスクリプトに基づいてそれを行う必要があります。私は次のようにワードプレスで書き換えルールを適用しようとしていますが、奇妙なPHPの問題が発生しました。変数を使用して作成されたダイナミックプロパティは、PHP 7.0では動作しません。dinamicプロパティ変数でプロパティを無効にするPHP 7.0

$rule = [ 'name' => 'profile', 
      'rule' => 'author_base', 
      'rewrite' => 'profile', 
      'position' => 'top', 
      'replace' => true, 
      'dynamic' => true 
     ]; 
global $wp_rewrite; 
global $wp; 
$wp->add_query_var($rule['name']); 
if(isset($rule['replace']) && $rule['replace']) { 
    var_dump($rule['rule']); // author_base 
    $wp_rewrite->$rule['rule']=$rule['rewrite']; // this doesn't work 
    $wp_rewrite->author_base=$rule['profile']; // this works 
    var_dump($wp_rewrite->$rule['rule']) // return null => BAD 
    var_dump($wp_rewrite->author_base); // returns 'author' => OK 
    // In PHP 5.6 Works both including $wp_rewrite->$rule['rule'] 
} else { 
    add_rewrite_rule($rule['rule'], $rule['rewrite'], $rule['position']); 
}  

答えて

1

これはphp7のB.Cの1つです。

変数、プロパティ、およびメソッドへの間接アクセスは、特殊なケースの前の組み合わせとは異なり、厳密に左から右の順序で評価されるようになりました。だから、

| Expression   | PHP 5 interpretation | PHP 7 interpretation | 
|---------------------|-----------------------|-----------------------| 
| $foo->$bar['baz']() | $foo->{$bar['baz']}() | ($foo->$bar)['baz']() | 

$wp_rewrite->{$rule['rule']}=$rule['rewrite']; 
var_dump($wp_rewrite->{$rule['rule']}); 
+0

$wp_rewrite->$rule['rule']=$rule['rewrite']; var_dump($wp_rewrite->$rule['rule']); 

を変更はい、作業、 '{}'これはまた、THとPHP 5.6で動作していることに気づきました – user3467855

関連する問題